2014-04-01 82 views
1

我試圖爲Backbone.Marionette中的控制器創建一個「基類」。我想這個問題可以由有關骨幹的知識的人來回答,因爲木偶與骨幹相同。我所做的是首先創建一個Marionette.Controller,它將通過從Marionette.Controller擴展而成爲基本控制器。然後,我進一步擴展了基本控制器以添加更多專用功能。我使用原型來調用基本控制器的initilize函數。這似乎工作正常,直到我發現基地似乎是靜態的。在下面的例子中,childid對於每個實例都是唯一的。然而,baseid對於所有實例都是相同的,即最新添加的baseid。Extend Marionette.Controller

App.Common.BaseWidget.Controller = Marionette.Controller.extend({ 
    initialize: function (options) { 
     this.model = options.model; 
     this.id = options.baseid; 
     this.region = options.region; 
    } 
}); 

App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({ 
    initialize: function (options) { 
     App.Common.BaseWidget.Controller.prototype.initialize(options); 
     this.id = options.childid; 
    } 
}); 
var widgets = [] 
widgets.push(new App.Widgets.ChildWidget.Controller({ "model": model , "region": region, "baseid": App.newGuid(), childid: App.newGuid() })); 

有沒有人知道是什麼原因造成的?

回答

3

你可能需要設置初始化適當範圍:

App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({ 
    initialize: function (options) { 
     App.Common.BaseWidget.Controller.prototype.initialize.apply(this, arguments); 
     this.id = options.childid; 
    } 
}); 
1

在骨幹網可以調用使用構造__super__父母的方法:

App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({ 
    initialize: function (options) { 
     this.constructor.__super__.initialize.apply(this, arguments); 
     this.id = options.childid; 
    } 
});