扩展Marionette.Controller

时间:2014-04-01 21:15:59

标签: javascript backbone.js marionette

我正在尝试为Backbone.Marionette中的控制器创建一个“基类”。我想这个问题可以由有骨干知识的人回答,因为Marionette与骨干一样延伸。我所做的是首先创建一个Marionette.Controller,它将作为基本控制器从Marionette.Controller扩展。然后我进一步扩展了基本控制器以添加更专业的功能。我通过使用原型从子控件中调用基本控制器initilize函数。这似乎工作正常,直到我注意到基地似乎是静态的。在下面的示例中,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() }));

有谁知道造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分: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 :(得分: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;
    }
});