代码之家  ›  专栏  ›  技术社区  ›  forvas

如何在节点加载到Odoo的JavaScript中后对其执行一些操作?

  •  0
  • forvas  · 技术社区  · 6 年前

    我做了一个新的小部件 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');
        },
    })
    

    input 元素 this.$el this.$el.parent() ,是因为 输入 元素是否在原始模板中声明?

    输入 keypress ,但同一行代码在中不起作用 init 方法,也不是 load 也不是 ready 事件。我怎样填写这篇文章 输入 每次用户打开包含“我的小部件”字段的窗体时,是否为?

    1 回复  |  直到 6 年前
        1
  •  0
  •   forvas    6 年前

    我可以使用 start 方法,该方法也被自动调用。这种情况发生在 init willStart ,然后渲染视图 开始 被称为。官方文档中的Widget Lifecycle部分对此进行了很好的解释:

    https://www.odoo.com/documentation/11.0/reference/javascript_reference.html

    启动方法。这对于执行某些特定的

    必须返回deferred以指示其工作何时完成。

    开始 方法并添加我的功能:

    start: function() {
        console.log('START');
        this._super.apply(this, arguments);
        this.$el.parent().find('input').val('START');
    },