2017-02-06 1 views
2

Ich möchte einen Abschnitt von JS-Code in Odoo 8 (Modul point_of_sale) ändern. Der ursprüngliche Code ist dieses:Wie ändere ich die Backbone JS-Funktion in 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); 

     }, 
    }); 
} 

ich einige Linien des Codes geändert und die Änderungen arbeiten, wie ich will (I entfernt nur die if (cashregister.journal.type !== 'cash') Linie). Das Problem ist, dass ich jetzt diesen Code richtig modifizieren möchte, von einem Modul, das von mir gemacht wurde.

, das zu tun, habe ich eine JavaScript-Datei, die aus der folgenden XML-Datei (die letzten in meinen __openerp__.pyDaten Parameter enthalten ist) genannt wird:

<?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> 

Und den Inhalt des JS Datei ist:

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

    }, 
}); 

}

ich das Modul aktualisiert und die Änderungen werden nicht angewendet, erhalte ich ein Fehler, weil include in Backbone-Modellen nicht zu existieren scheint. Ich habe versucht, mit set statt include, aber ich habe den gleichen Fehler:

instance.point_of_sale.Order.set ist keine Funktion

Kann mir hier jemand helfen, bitte?

Antwort

2

Sie können auf diese Weise versuchen. diese

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

Ihr Code funktioniert !! (mit einer einfachen Bearbeitung). Vielen Dank!! – forvas

0

Versuchen:

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

Vielen Dank für Ihre Antwort. Ihr Code gibt * "Eigenschaft kann nicht gelesen werden" Modell "undefined" * Fehler. – forvas

+0

Meine Antwort wurde aktualisiert. Versuch es noch einmal. – KbiR

+0

Ich habe gerade den neuen Code versucht, aber ich bekomme den gleichen Fehler, den ich in meinem vorherigen Kommentar geschrieben habe. Die Lösung von @Viki Chavada scheint im Moment großartig zu funktionieren, ich werde es mehr versuchen, um zu überprüfen, dass es keine sekundären Effekte mit diesem Code gibt. Danke gleichfalls. – forvas