odoo表单视图从js更新另一个字段的值

时间:2018-08-08 16:30:39

标签: javascript odoo-11

我有一个自定义窗口小部件,该窗口小部件应设置模型中另一个字段的值。我通过在领域模型中执行从JS到setter的RPC来实现此目的。这可行,但是新值不会立即显示在UI中。因此,要查看该值,我必须刷新页面。

是否可以使用JS更新表单视图?

通过自定义小部件在模型内部设置值的正确方法是什么?

示例

我有一个字段A和一个字段C。C有一个自定义小部件,例如按钮。单击按钮时,应更改A的值。问题是如何从字段B的自定义窗口小部件更新字段A?

注意

我在Odoo 11上,我认为它改变了很多JS API

1 个答案:

答案 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种方法可以像这样更新它。