微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Odoo 覆盖 Javascript 类方法

如何解决Odoo 覆盖 Javascript 类方法

首先,我很抱歉 - 在 javascript 方面我是一个完全的新手,所以这有点超出我的想象。我对 odoo 也很陌生,到目前为止,我主要坚持使用 Python 和 XML 定制。

我正在尝试覆盖类中的 javascript 方法,以将其完全替换为我自己的版本。从 odoo 文档 (https://www.odoo.com/documentation/14.0/reference/javascript_reference.html#patching-an-existing-class) 来看,这应该是使用 .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
    },});
});

知道我在这里做错了什么吗?我已经尝试使用扩展等各种其他方法,但我认为我不想扩展 - 这不会替换现有实例中的功能

解决方法

这里的问题是 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;
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。