【发布时间】:2018-09-10 08:05:45
【问题描述】:
我为Char 字段制作了一个新小部件。我从Char 的原始模板继承了它的模板:
<t t-name="FieldRed" t-extend="FieldChar">
<t t-jquery="input" t-operation="attributes">
<attribute name="id">barcode_input</attribute>
<attribute name="class">o_form_input bg-red</attribute>
</t>
</t>
然后,我只是在加载时尝试用一些文本填充该字段(我知道我可以在不使用 JavaScript 的情况下做到这一点,但我需要从我的实际目的开始管理它)。所以,我这样做了:
var FieldRed = widget.FieldChar.extend({
template: 'FieldRed',
events: _.extend({}, widget.FieldChar.prototype.events, {
'load': 'on_load',
'ready': 'on_ready',
'keypress': 'on_keypress',
}),
init: function (field_manager, node) {
console.log('INIT');
this._super(field_manager, node);
this.$el.parent().find('input').val('INIT');
},
on_load: function (e) {
console.log('LOAD');
this.$el.parent().find('input').val('LOAD');
},
on_ready: function (e) {
console.log('READY');
this.$el.parent().find('input').val('READY');
},
on_keypress: function (e) {
console.log('KEYPRESS');
this.$el.parent().find('input').val('KEYPRESS');
},
})
首先,我希望在this.$el中找到input元素,但它在this.$el.parent()中,是不是因为在原始模板中声明了input元素?
我的主要问题是:我可以在keypress 上自动填写input 节点文本,但是同一行代码在init 方法中不起作用,load 和ready 事件都不起作用。每次用户使用我的小部件打开包含字段的表单时,如何填写 input 节点的文本?
【问题讨论】:
标签: javascript xml odoo odoo-10