Odoo 覆盖 Javascript Class 方法
Odoo Override Javascript Class Method
首先,我很抱歉 - 在 javascript 方面我完全是新手,所以这有点超出我的理解范围。我也是 Odoo 的新手,到目前为止,我主要坚持使用 python 和 XML 自定义。
我正在尝试覆盖 class 中的 javascript 方法,以将其完全替换为我自己的版本。根据 Odoo 文档 (https://www.odoo.com/documentation/14.0/reference/javascript_reference.html#patching-an-existing-class),这应该是使用 .include() 方法用我的新方法修补原始 class 的简单问题。但是当我这样做时,我得到一个错误 Error while loading mymodule.CustomControlPanelModelExtension: TypeError: ControlPanelModelExtension.include is not a function
我试图覆盖的原始 Odoo 代码:
odoo.define("web/static/src/js/control_panel/control_panel_model_extension.js", function (require) {
"use strict";
// a bunch of code here ...
class ControlPanelModelExtension extends ActionModel.Extension {
// more code here ...
// this is the method I'm trying to override
_getAutoCompletionFilterDomain(filter, filterQueryElements) {
// original method body here
}
// more code
}
// more code
});
下面是我根据文档得出的结果,但这给了我错误 Error while loading mymodule.CustomControlPanelModelExtension: TypeError: ControlPanelModelExtension.include is not a function
(此错误在浏览器开发工具控制台中报告)。
odoo.define('mymodule.CustomControlPanelModelExtension', function(require) {
"use strict";
var ControlPanelModelExtension = require('web/static/src/js/control_panel/control_panel_model_extension.js');
ControlPanelModelExtension.include({
// override _getAutoCompletionFilterDomain
_getAutoCompletionFilterDomain: function(filter, filterQueryElements) {
// my custom implementation here
},
});
});
知道我做错了什么吗?我已经用扩展等尝试了其他各种东西,但我不认为我想扩展 - 这不会替换现有实例中的功能。
这里的问题是 include
函数仅适用于继承自 OdooClass
的 classes,在这种情况下,您要尝试的 class inherit 是原生 JavaScript class.
然后,要向 class 添加 属性 或方法,必须修改对象 class 的原型 属性。
odoo.define('mymodule.CustomControlPanelModelExtension', function(require) {
"use strict";
const ControlPanelModelExtension = require('web/static/src/js/control_panel/control_panel_model_extension.js');
function _getAutoCompletionFilterDomain(filter, filterQueryElements) {
// your custom implementation here
}
ControlPanelModelExtension.prototype._getAutoCompletionFilterDomain = _getAutoCompletionFilterDomain;
return ControlPanelModelExtension;
});
首先,我很抱歉 - 在 javascript 方面我完全是新手,所以这有点超出我的理解范围。我也是 Odoo 的新手,到目前为止,我主要坚持使用 python 和 XML 自定义。
我正在尝试覆盖 class 中的 javascript 方法,以将其完全替换为我自己的版本。根据 Odoo 文档 (https://www.odoo.com/documentation/14.0/reference/javascript_reference.html#patching-an-existing-class),这应该是使用 .include() 方法用我的新方法修补原始 class 的简单问题。但是当我这样做时,我得到一个错误 Error while loading mymodule.CustomControlPanelModelExtension: TypeError: ControlPanelModelExtension.include is not a function
我试图覆盖的原始 Odoo 代码:
odoo.define("web/static/src/js/control_panel/control_panel_model_extension.js", function (require) {
"use strict";
// a bunch of code here ...
class ControlPanelModelExtension extends ActionModel.Extension {
// more code here ...
// this is the method I'm trying to override
_getAutoCompletionFilterDomain(filter, filterQueryElements) {
// original method body here
}
// more code
}
// more code
});
下面是我根据文档得出的结果,但这给了我错误 Error while loading mymodule.CustomControlPanelModelExtension: TypeError: ControlPanelModelExtension.include is not a function
(此错误在浏览器开发工具控制台中报告)。
odoo.define('mymodule.CustomControlPanelModelExtension', function(require) {
"use strict";
var ControlPanelModelExtension = require('web/static/src/js/control_panel/control_panel_model_extension.js');
ControlPanelModelExtension.include({
// override _getAutoCompletionFilterDomain
_getAutoCompletionFilterDomain: function(filter, filterQueryElements) {
// my custom implementation here
},
});
});
知道我做错了什么吗?我已经用扩展等尝试了其他各种东西,但我不认为我想扩展 - 这不会替换现有实例中的功能。
这里的问题是 include
函数仅适用于继承自 OdooClass
的 classes,在这种情况下,您要尝试的 class inherit 是原生 JavaScript class.
然后,要向 class 添加 属性 或方法,必须修改对象 class 的原型 属性。
odoo.define('mymodule.CustomControlPanelModelExtension', function(require) {
"use strict";
const ControlPanelModelExtension = require('web/static/src/js/control_panel/control_panel_model_extension.js');
function _getAutoCompletionFilterDomain(filter, filterQueryElements) {
// your custom implementation here
}
ControlPanelModelExtension.prototype._getAutoCompletionFilterDomain = _getAutoCompletionFilterDomain;
return ControlPanelModelExtension;
});