2017-02-06 1 views
2

Я хочу изменить раздел JS-кода в Odoo 8 (модуль point_of_sale). Исходный код это один:Как изменить функцию JS в базовой системе в Odoo 8?

function openerp_pos_models(instance, module){ 
    ... 
    module.Order = Backbone.Model.extend({ 
     ... 
     addPaymentline: function(cashregister) { 
      var paymentLines = this.get('paymentLines'); 
      var newPaymentline = new module.Paymentline({},{cashregister:cashregister, pos:this.pos}); 
      if(cashregister.journal.type !== 'cash'){ 
       newPaymentline.set_amount(Math.max(this.getDueLeft(),0)); 
      } 
      paymentLines.add(newPaymentline); 
      this.selectPaymentline(newPaymentline); 

     }, 
    }); 
} 

Я изменил несколько строк этого кода и изменения работают так, как я хочу (я только удалил if (cashregister.journal.type !== 'cash') линию). Проблема в том, что теперь я хочу изменить этот код правильно, из модуля, сделанного мной.

Чтобы сделать это, я добавил файл JavaScript, который вызывается из следующего файла XML (этот последний входит в мои __openerp__.pyданные параметр):

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 
     <template id="assets_backend" name="nmx_pos_ext assets" inherit_id="web.assets_backend"> 
      <xpath expr="." position="inside"> 
       <script type="text/javascript" src="/nmx_pos_ext/static/src/js/nmx_pos_ext.js"></script> 
      </xpath> 
     </template> 
    </data> 
</openerp> 

И содержание JS файл:

openerp.nmx_pos_ext = function(instance) { 

var _t = instance.web._t; 

instance.point_of_sale.Order.include({ 
    addPaymentline: function(cashregister) { 
     var paymentLines = this.get('paymentLines'); 
     var newPaymentline = new module.Paymentline({},{cashregister:cashregister, pos:this.pos}); 
     newPaymentline.set_amount(Math.max(this.getDueLeft(),0)); 
     paymentLines.add(newPaymentline); 
     this.selectPaymentline(newPaymentline); 

    }, 
}); 

}

Я обновил модуль и изменения не применяются, я получаю ошибка, потому что include, похоже, не существует в моделях Backbone. Я попытался с set вместо include, но я получаю ту же ошибку:

instance.point_of_sale.Order.set не является функцией

Может кто-нибудь помочь мне здесь, пожалуйста?

ответ

2

Вы можете попробовать таким образом.

openerp.nmx_pos_ext = function(instance) { 
    var _t = instance.web._t; 

    var _initialize_Order_ = instance.point_of_sale.Order.prototype; 
    instance.point_of_sale.Order = instance.point_of_sale.Order.extend({ 
     initialize: function(attributes){ 
      _initialize_Order_.initialize.call(this,attributes); 
     }, 
     addPaymentline: function(cashregister) { 
      var paymentLines = this.get('paymentLines'); 
      var newPaymentline = new instance.point_of_sale.Paymentline(
       {}, 
       { 
        cashregister: cashregister, 
        pos: this.pos 
       } 
      ); 
      newPaymentline.set_amount(
       Math.max(this.getDueLeft(), 0) 
      ); 
      paymentLines.add(newPaymentline); 
      this.selectPaymentline(newPaymentline); 

     }, 
    }); 
} 
+0

Ваш код работает !! (с простым редактированием). Большое спасибо!! – forvas

0

Попробуйте это:

instance.module.Order.include({ 
addPaymentline: function(cashregister) { 
    var paymentLines = this.get('paymentLines'); 
    var newPaymentline = new module.Paymentline({},{cashregister:cashregister, pos:this.pos}); 
    newPaymentline.set_amount(Math.max(this.getDueLeft(),0)); 
    paymentLines.add(newPaymentline); 
    this.selectPaymentline(newPaymentline); 

    }, 
}); 
+0

Спасибо, что ответили. Ваш код дает * «Невозможно прочитать свойство« Модель »неопределенной ошибки *. – forvas

+0

Обновлен мой ответ. Попробуй еще раз. – KbiR

+0

Я только что попробовал новый код, но получаю ту же ошибку, которую написал в своем предыдущем комментарии. Решение, данное @Viki Chavada, похоже, отлично работает на данный момент, я собираюсь попробовать его просто для того, чтобы проверить, нет ли побочных эффектов с этим кодом. Благодарю вас. – forvas

Смежные вопросы