我有一个自定义窗口小部件,该窗口小部件应设置模型中另一个字段的值。我通过在领域模型中执行从JS到setter的RPC来实现此目的。这可行,但是新值不会立即显示在UI中。因此,要查看该值,我必须刷新页面。
是否可以使用JS更新表单视图?
通过自定义小部件在模型内部设置值的正确方法是什么?
示例
我有一个字段A和一个字段C。C有一个自定义小部件,例如按钮。单击按钮时,应更改A的值。问题是如何从字段B的自定义窗口小部件更新字段A?
注意
我在Odoo 11上,我认为它改变了很多JS API
答案 0 :(得分:2)
我检查了字段更新方式之间的区别:您的和基本的键盘输入方式。区别在于更新方式时,服务器不会调用onchange。
js文件
odoo.define('theme_address.theme', function (require) {
"use strict";
var Widget= require('web.Widget');
var widgetRegistry = require('web.widget_registry');
var changeTitle = function() {
opp_name.value = value_input.value;
};
var MyWidget = Widget.extend({
template: 'sigPad',
events: {
'click .your_class': 'change_opp_name',
},
change_opp_name: function () {
var opp_name = document.getElementById("o_field_input_21");
var value_input = document.getElementById('value_input');
var change_opp_name_button = document.getElementById('change_opp_name_button');
var event = new Event('change');
change_opp_name_button.addEventListener('change', changeTitle(), false);
opp_name.dispatchEvent(event);
}
});
widgetRegistry.add(
'my_widget', MyWidget
);
return MyWidget;
});
模板
<?xml version="1.0" encoding="utf-8"?>
<templates>
<t t-name="sigPad">
<div>
<input type="text" id="value_input" class="form-control" style="max-width: 400px; width: 150px"/>
<input type="button" id="change_opp_name_button" class="your_class" value="Submit"/>
</div>
</t>
</templates>
我ll continue looking into more methods of doing that, i
被告知,至少还有另外2种方法可以像这样更新它。