[英]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.