odoo 的 widget 渲染时,template 应该是必须的。
odoo.define('mycounter.js', function (require) {
"use strict";
var Widget = require('web.Widget');
var Counter = Widget.extend({
template: 'mycounter',
events: {
'click button': '_onClick',
},
init: function (parent, value) {
this._super.apply(this, arguments);
this.count = value;
},
_onClick: function () {
this.count++;
console.log(this.count)
this.$('.val').text(this.count);
},
});
return Counter;
qweb:
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="mycounter">
<span class="val"><t t-esc="widget.count"/></span>
<button>Increment</button>
</t>
</templates>
widget 写好后需要地方调用,fieldwidget 必须向 fieldRegistry 里 add,一般的 widget 需要被 new 和 添加到 dom,有 appendTo prependTo 等方法:
this.counter = new mycounter(self, 4);
this.counter.appendTo(self.$el);
问题:1,怎么通过 $ 定位元素;2,页面有生成,但是事件没触发。
问题2:
<div>
<span class="o_app"><t t-esc="widget.count"/></span>
<button>Increment</button>
</div>
必须被容器包着,作用范围在容器内
网友评论