Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Odoo中小部件的Javascript标识符_Javascript_Python_Openerp_Odoo 8 - Fatal编程技术网

Odoo中小部件的Javascript标识符

Odoo中小部件的Javascript标识符,javascript,python,openerp,odoo-8,Javascript,Python,Openerp,Odoo 8,如果视图中有两个小部件。您对第一个小部件执行一些操作,并希望更新第二个小部件(调用display\u field)。如何为第二个小部件设置标识符 例如,在小部件的扩展定义中: local.FieldNewWidget = instance.web.form.AbstractField.extend({ init: function(parent, options) { }, events: { 'click .oe_new_input_button': '

如果视图中有两个
小部件
。您对第一个小部件执行一些操作,并希望更新第二个小部件(调用
display\u field
)。如何为第二个小部件设置
标识符

例如,在
小部件的扩展定义中:

local.FieldNewWidget = instance.web.form.AbstractField.extend({
    init: function(parent, options) {
    },
    events: {
        'click .oe_new_input_button': 'open_new_specific_form',
    },
    start: function() {
    },
    display_field: function() {
    },
    render_value: function() {
    },
    open_new_specific_form: function(event) {
        var self = this;

        var new_action = {
            type: 'ir.actions.act_window',
            name: $(event.target).data('name'),
            res_model: $(event.target).data('data-model'),
            res_id: $(event.target).data('res-id'),
            view_mode: 'form',
            view_type: 'form',
            views: [[false, 'form']],
            target: 'new',
            context: {
            },
            flags: {'form': {'action_buttons': true}},
        }

        self.do_action(new_action, {
            on_close: function() {
                // I want to refresh (call display_field) the second widget here.
                // What is the identifier for the second widget?
            },
        });
    },
});

我认为这会奏效,但我不知道这是否是最好的解决方案。我认为每个小部件都通过使用(this.view)知道它的witch视图。为什么不使用特殊事件从一个小部件触发它,并在另一个小部件中侦听它呢

例如,在小部件上注册事件侦听器以侦听视图上的属性更改:

         //in first widget register the event listener:
         this.view.on('property_name', this, this.your_method);



        // in second widget trigger the event by setting the value
        this.view.set('property_name', a_value);

我是odoo javascript新手,请告诉我这是否适用于您我认为有一个更好的解决方案,使用事件触发而不更改属性。

如果您给出如何在视图中触发事件的示例,那就太好了。只需在我看到的每个Widget的init或start函数中添加这一行,以编程方式设置视图属性。很抱歉,我以前没有注意到这一点。有一件事,不要忘记在widget的init函数中调用super,因为您将阻止由odoo管理的关系paretn子级_是的,我调用了父构造函数和方法。我从示例代码中省略了这几行,因为我想缩短文章的篇幅,并将重点放在我遇到问题的部分。谢谢你的关心,切里夫