我试图在Backbone.Marionette中为控制器创建一个“基类”。我想这个问题也可以由一个有脊骨知识的人来回答,因为Marionette和脊骨一样延伸。我所做的是首先创建一个Marionette.Controller,它将通过从Marionette.Controller扩展作为基本控制器。然后,我进一步扩展了基本控制器,以增加更专门的功能。我使用原型从子控制器调用基控制器初始化函数。这似乎很好,直到我注意到基地似乎是静态的。在下面的示例中,childid对于每个实例都是唯一的。然而,在所有情况下,baseid都是一样的,这是最新增加的baseid。
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() }));有人知道是什么导致的吗?
发布于 2014-04-01 22:07:31
您可能需要为初始化设置适当的范围:
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;
}
});发布于 2014-04-02 05:04:02
在主干中,可以使用构造函数的__super__调用父方法:
App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({
initialize: function (options) {
this.constructor.__super__.initialize.apply(this, arguments);
this.id = options.childid;
}
});https://stackoverflow.com/questions/22797034
复制相似问题