如何修复Odoo 10中的“在初始化之前无法在自动完成上调用方法;​​试图调用方法小部件”错误?

时间:2018-11-13 13:57:32

标签: javascript jquery odoo odoo-10

我创建了自己的小部件。当执行X动作时,将调用我的方法init_product_tmpl_id。此方法在JavaScript中生成一个 Many2one 字段,该字段类似于我们在Python中用于创建产品的字段。

该方法一切正常。而且,每当用户选择一个新产品时,我都想执行另一个操作。如您所见,这就是为什么我在方法内编写this.product_tmpl_m2o.on('change:value', self, function() { ... })的一部分。

我要执行的操作是动态创建一个 Many2many 字段,以选择税金。我正在使用相同的DefaultFieldManager进行制作(不确定是否是个好主意)。

每次修改产品时,我都需要用新的替换旧的Many2many税。为此,我再次重新定义 Many2many ,并使用remove方法删除其DOM,并使用prependTo重新生成它。

问题是我删除DOM所在的行:

self.$('tr.oe_product_tmpl_addition td.oe_product_tmpl_taxes_add span>div').remove();

那是给我的错误:

  

未捕获的错误:无法在自动完成之前调用方法   初始化;尝试调用方法“部件”

经过大量的搜索并尝试了多种解决方法后,我几乎放弃了。看来类ui-autocomplete丢失了,出于某种原因这是必需的。我试图添加它(您可以看到有3次尝试被评论)和许多其他解决方法,但是没有办法。

这是代码:

init_product_tmpl_id: function() {
    this.destroy_content();
    var self = this;
    this.dfm = new form_common.DefaultFieldManager(this);
    this.dfm.extend_field_desc({
        product_tmpl_id: {
            relation: 'product.template',
        },
    });
    var FieldMany2One = core.form_widget_registry.get('many2one');
    this.product_tmpl_m2o = new FieldMany2One(this.dfm, {
        attrs: {
            name: 'product_tmpl_id',
            type: 'many2one',
            modifiers: JSON.stringify({
                required: true,
                readonly: this.get('effective_readonly'),
            }),
        },
    });
    this.product_tmpl_m2o.prependTo(this.$('tr.oe_product_tmpl_addition td.oe_product_tmpl_id')).then(function() {
        self.product_tmpl_m2o.$el.addClass('oe_edit_only');
    });

    // ONCHANGE PRODUCT TEMPLATE

    this.product_tmpl_m2o.on('change:value', self, function() {
        var id = self.product_tmpl_m2o.get_value();
        if (id === false) {
            self.dfm.set({display_invalid_fields: true});
            return;
        }
        else {
            self.dfm.extend_field_desc({
                tax_id: {
                    relation: 'account.tax',
                },
            });
            var FieldMany2manyTags = core.form_widget_registry.get('many2many_tags');
            self.taxes_m2m = new FieldMany2manyTags(self.dfm, {
                attrs: {
                    name: 'tax_id',
                    type: 'many2many',
                },
            });
            self.$('tr.oe_product_tmpl_addition td.oe_product_tmpl_taxes_add span>div').remove();
            self.taxes_m2m.prependTo(self.$('tr.oe_product_tmpl_addition td.oe_product_tmpl_taxes_add span')).then(function() {
                // self.taxes_m2m.$el.append($('ul.ui-autocomplete'));
                // self.taxes_m2m.$el.find('ul').addClass('ui-autocomplete');
                // self.taxes_m2m.$el.find('input').autocomplete();
                self.taxes_m2m.$el.addClass('oe_edit_only');
            });
        };
    });

有人知道如何解决此错误,或者有更好的解决办法吗?缺少Odoo JS的文档以及Odoo标准模块中缺少的示例使这一点变得非常困难。

0 个答案:

没有答案