首页 > 解决方案 > odoo 表单视图从 js 更新另一个字段的值

问题描述

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

有没有办法使用 JS 更新表单视图?

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

例子

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

笔记

我在使用 Odoo 11,它改变了很多 JS API,我想

标签: javascriptodoo-11

解决方案


我检查了更新字段的方式之间的区别:您的方式和基本的键盘输入方式。不同之处在于当您更新方式时,服务器不会调用 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被告知至少还有另外两种方法可以像这样更新它。


推荐阅读