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子级_是的,我调用了父构造函数和方法。我从示例代码中省略了这几行,因为我想缩短文章的篇幅,并将重点放在我遇到问题的部分。谢谢你的关心,切里夫