首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Marionette.Controller

扩展Marionette.Controller
EN

Stack Overflow用户
提问于 2014-04-01 21:15:58
回答 2查看 1.1K关注 0票数 1

我试图在Backbone.Marionette中为控制器创建一个“基类”。我想这个问题也可以由一个有脊骨知识的人来回答,因为Marionette和脊骨一样延伸。我所做的是首先创建一个Marionette.Controller,它将通过从Marionette.Controller扩展作为基本控制器。然后,我进一步扩展了基本控制器,以增加更专门的功能。我使用原型从子控制器调用基控制器初始化函数。这似乎很好,直到我注意到基地似乎是静态的。在下面的示例中,childid对于每个实例都是唯一的。然而,在所有情况下,baseid都是一样的,这是最新增加的baseid。

代码语言:javascript
复制
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() }));

有人知道是什么导致的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-01 22:07:31

您可能需要为初始化设置适当的范围:

代码语言:javascript
复制
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;
    }
});
票数 3
EN

Stack Overflow用户

发布于 2014-04-02 05:04:02

在主干中,可以使用构造函数的__super__调用父方法:

代码语言:javascript
复制
App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({
    initialize: function (options) {
        this.constructor.__super__.initialize.apply(this, arguments);
        this.id = options.childid;
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22797034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档