11

基本的に、関数を拡張してオーバーライドしようとしています。私は次の基本(簡略化された)コードを持っています:

openerp.point_of_sale = function(db) {

    var Order = Backbone.Model.extend({

        exportAsJSON: function() {
            return {'bigobject'}
        }
    })
}

次に、exportAsJSON関数を継承してオーバーライドする独自の.jsを作成していますが、 .extendの方法がわかりません。これが私の誤ったアプローチです:

openerp.my_module = function(db) {

    db.point_of_sale.Order = db.point_of_sale.Order.extend({

        exportAsJSON: function() {

            var order_data = this._super();
            //... add more stuff on object
            return order_data;
        }
    })
}

それを行う正しい方法は何でしょうか?

私は答えのために十分な情報を提供していることを願っています(ちなみに私はOpenERPに取り組んでいます)。どんな助けでもありがたいです。

編集:より具体的には、エラーは拡張機能自体にあるようです:

db.point_of_sale.Order = db.point_of_sale.Order.extend({

...単純なリターン0を入れても; exportAsJSON関数内でページが読み込まれず、ブラウザコンソールで次のエラーが発生します。

"Cannot call method 'extend' of undefined" 
4

3 に答える 3

2

これは、JavaScript で通常行う方法です。

var eaj = db.point_of_sale.Order.prototype.exportAsJSON;

db.point_of_sale.Order = db.point_of_sale.Order.extend({
    exportAsJSON: function() {

        var order_data = eaj.apply( this, arguments );
        //... add more stuff on object
        return order_data;
    }
})
于 2012-10-30T19:00:26.360 に答える
2

次のようなものが欲しいと思いますSuperClass.prototype.method.call(this)

openerp.my_module = function(db) {

    db.point_of_sale.Order = db.point_of_sale.Order.extend({

        exportAsJSON: function() {

            var order_data = db.point_of_sale.Order.prototype.exportAsJSON.call(this);
            //... add more stuff on object
            return order_data;
        }
    })
}
于 2012-10-30T18:59:23.333 に答える
2

これは基本的に問題がある場所です:

openerp.point_of_sale = function(db) {
    var Order = Backbone.Model.extend({
     ^
     |
  this is a private variable
  not a property!

したがって、まったくアクセスできません。次のように定義されている場合:

openerp.point_of_sale = function(db) {
    openerp.point_of_sale.Order = Backbone.Model.extend({
                           ^
                           |
                     this is now a property of point_of_sale
                     (basically public variable)

その後、次の方法でアクセスできます。

db.point_of_sale.Order = db.point_of_sale.Order.extend({

したがって、答えは、それはできないということです。db.point_of_saleの代わりに拡張または変更する必要がありOrderます。

于 2012-10-31T02:54:42.510 に答える