Odoo重写Javascript类方法



首先,我很抱歉,我是javascript的新手,所以这有点超出我的想象。我也是Odoo的新手,到目前为止,我主要使用python和XML定制。

我试图在类中重写一个javascript方法,用我自己的版本完全替换它。来自Odoo文档(https://www.odoo.com/documentation/14.0/reference/javascript_reference.html#patching-现有的类(这应该是一个简单的问题,使用.include((方法用我的新方法修补原始类。但当我这样做时,我会得到一个错误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
},
});
});

你知道我在这里做错了什么吗?我已经尝试过使用extends之类的其他方法,但我认为我不想进行扩展——这不会取代现有实例中的函数。

这里的问题是include函数仅适用于从OdooClass继承的类,在这种情况下,您试图继承的类是一个本地JavaScript类。


然后,要向类添加属性或方法,必须修改对象类的原型属性。

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;
});

最新更新