在保持基本功能的同时扩展Backbone功能

时间:2014-03-07 23:49:51

标签: javascript backbone.js marionette

我正在尝试在初始化函数中向Backbone.View添加一些处理功能,我希望将其转移到我的所有Backbone视图。问题是,我正在使用木偶,所以我不能做这样的事情:

var BaseView = Backbone.View.extend({})

因为Marionette扩展了Backbone.View本身。这就是我想做的事情:

// Add processoring logic to an extended version of Backbone. 
Backbone.View.extend({
    initialize: function(options){
       if(options.hasOwnProperty("vents") {
         // process vents
       }

       // native code. Calling the library's actual original function to maintain original functionality.
       Backbone.View.initialize(this, aurguments);          

    }
})

var CollectionView = new Marionette.CollectionView({
     vents: {VentCallName: function(){}}
     // When initialize is called, it'll see the vents and deal with them automatically.
});

我只是不确定如何将功能添加到Backbone.View,同时保持其中已有的任何功能逻辑。

修改

如何在不创建新的扩展实例的情况下将初始扩展功能实际放入Backbone.View.initialize并将所有视图基于此?我不能让Marionette使用那个扩展视图,所以额外的处理必须进入Backbone.View的初始化函数。

如果我这样做,它会自行循环:

Backbone.View.prototype.initialize = function(){
    console.log("moooo");
            // custom logic then run Backbone.View.initialize native code. 
    Backbone.View.prototype.initialize.apply(this, arguments);
}

1 个答案:

答案 0 :(得分:2)

Backbone.View.prototype.initialize.apply(this,arguments);

修改

好吧,这是一个稍微不同的问题。

var oldInitialize = Backbone.View.prototype.initialize;
Backbone.View.prototype.initialize = function(){
  console.log("moooo");
  // custom logic then run Backbone.View.initialize native code. 
  oldInitialize.apply(this, arguments);
}