簡體   English   中英

如何在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的更改方法。 PS我用大寫字母寫ODOO是因為每個人都回答簡單的JQuery風格,這不僅僅是簡單的JQuery,這必須是與ODOO更具體相關的東西。 或者也許我可以在字段更改后調用特定表單視圖的Python函數,就像這樣。 我找到的所有odoo文檔都提供了很少或沒有相關信息。

更新:

感謝@Vishal Khichadiya我有點接近。 我通過創建一個小部件來編輯他的答案。 現在當我將這個小部件設置為隨機字段時,讓我們說一些不可見的字段,我可以在我想要的任何字段上使用類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"/>

首先,你需要在xml代碼中將class屬性設置為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;
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM