在 Odoo JavaScript 上,我如何检查某个表单视图何时打开并且其中的字段已更改?

How can I check when certain form view is opened and field has changed in it on Odoo JavaScript?

到目前为止我有的是基本代码:

odoo.define('partner_data.res_partner_widget', function(require) {
"use strict";

    var core = require('web.core');
    var Dialog = require('web.Dialog');
    var form_common = require('web.form_common');
    var Widget = require('web.Widget');

    var Model = require('web.Model');

    var _t = core._t;
    var QWeb = core.qweb;

    console.log('JS loaded');

    $(document).on('ready', function() {
        console.log('Doc is ready');
        $('#FIELD').on('change', function() {
            // Change value of other fields in this form

        });
    });
});

问题是文档就绪在整个 ODOO 系统中触发。并试图通过其名称 $(#fieldname) 查找字段根本不起作用。

是否有针对此问题的 ODOO 专用解决方案?或者,也许您知道解释 ODOO FIELD 更改方法的非常好的文档或示例。 P.S。我把ODOO写成大写是因为每个人都回答简单的JQuery风格,而这不仅仅是简单的JQuery,这一定是与ODOO相关的更具体的东西。 或者,也许我可以在字段更改后调用特定表单视图的 Python 函数,诸如此类。我找到的所有 odoo 文档都很少或根本没有提供相关信息。

更新:

感谢@Vishal Khichadiya,我离得有点近了。我通过创建一个小部件来编辑他的答案。现在,当我将这个小部件设置为随机字段时,让我们说一些不可见的字段,我可以在我想要的任何字段上使用 class class_partner,它会触发 onchange 方法。

odoo.define('partner_data.res_partner_widget', function(require) {
"use strict";

var base = require('web_editor.base');
var options = require('web_editor.snippets.options');
var core = require('web.core');
var Dialog = require('web.Dialog');
var session = require('web.session');
var form_common = require('web.form_common');
var Widget = require('web.Widget');

var Model = require('web.Model');

var _t = core._t;
var QWeb = core.qweb;

var onchange_js_method_test = form_common.AbstractField.extend({
    start: function () {
        this._super();
        var self = this;
        $('body').on('change', '.class_partner', function() {
            console.log('start triggered');
            console.log(self)
            // Change value of other fields in this form
           //you can call python function from here to set your value
        });
    }
});
core.form_widget_registry.add('onchange_js_method_test', onchange_js_method_test);
});

xml:

<field name="random_invisible" " widget="onchange_js_method_test"/>
<field name="on_this_field_onchange_triggers" class="class_partner"/>

首先,您需要将 class 属性设置为在 xml 代码中提交的 python。 例如:

<field name="partner_id" class="class_partner" />

然后你需要在 js 中添加这个 js 文件到 assets_backend.

    odoo.define('partner_data.res_partner_widget', function(require) {
    "use strict";

        var core = require('web.core');
        var Dialog = require('web.Dialog');
        var form_common = require('web.form_common');
        var Widget = require('web.Widget');

        var Model = require('web.Model');

        var _t = core._t;
        var QWeb = core.qweb;
        var my_widget = Widget.extend({
            start: function () {
                this._super();  
                var self = this;
                $('body').on('change', '.class_partner',function() {
                    // Change value of other fields in this form
                   //you can call python function from here to set your value
                });
           },
        });
        core.action_registry.add('my_widget', my_widget);
        return my_widget;
    });