在 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;
});
到目前为止我有的是基本代码:
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;
});