在Odoo 10中继承POS Javascript函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Odoo 10中继承POS Javascript函数相关的知识,希望对你有一定的参考价值。

我试图继承和修改point_of_sale模块的现有js函数。这是我需要继承的功能

models.js

exports.Orderline = Backbone.Model.extend({
set_quantity: function(quantity){
    console.log('quantity',quantity);
    this.order.assert_editable();
    if(quantity === 'remove'){
        this.order.remove_orderline(this);
        return;
    }else{
        var quant = parseFloat(quantity) || 0;
        var unit = this.get_unit();
        if(unit){
            if (unit.rounding) {
                this.quantity    = round_pr(quant, unit.rounding);
                var decimals = this.pos.dp['Product Unit of Measure'];
                this.quantityStr = formats.format_value(round_di(this.quantity, decimals), { type: 'float', digits: [69, decimals]});
            } else {
                this.quantity    = round_pr(quant, 1);
                this.quantityStr = this.quantity.toFixed(0);
            }
        }else{
            this.quantity    = quant;
            this.quantityStr = '' + this.quantity;
        }
    }
    this.trigger('change',this);
},
});

这是我的代码:

pos_model.js

odoo.define('point_of_sale.models_inherit', function (require) {
"use strict";

   var module = require('point_of_sale.models');
   module.include({

   set_quantity: function(quantity){
       console.log('initialize');
             }


     }); 

 });

现在我在控制台中收到错误,

 `module.include is not a function`

我怎么能继承这个?

答案

尝试下面的代码片段!已经在Odoo v10.0测试过

odoo.define('point_of_sale.models', function (require) {
"use strict";

var models = require('point_of_sale.models');

var _super_orderline = models.Orderline.prototype;

models.Orderline = models.Orderline.extend({
    set_quantity: function(quantity){

        // Call SUPER method!!
        _super_orderline.set_quantity.apply(this,arguments);

        // =============
        // DO YOUR STUFF
        // =============

    }
});

});

BTW,你可以在odoo 10中找到相同的例子...检查multiprint.js文件!!

另一答案

我认为你需要使用module.Orderline.include而不是module.include [source],因为point_of_sale.models是一个object

odoo.define('point_of_sale.models_inherit', function (require) {
    "use strict";

    var module = require('point_of_sale.models');
    module.Orderline.include({
        set_quantity: function(quantity) {
            console.log('initialize');
        }
    });

});

以上是关于在Odoo 10中继承POS Javascript函数的主要内容,如果未能解决你的问题,请参考以下文章

odoo中继承视图extention和primary的区别

如何在 JavaScript 中继承 C++ 类?

JavaScript中继承的实现方式

JavaScript中继承的实现方式

JavaScript中继承方式详解

老生常谈javascript的5中继承