这看起来像是执行backbone.js视图继承的最佳/正确方法

时间:2011-10-20 16:10:59

标签: inheritance views backbone.js

这是我提出的问题的后续跟进

Backbone.js Inherit Views

但它有点乱,现在我有一个解决方案,我希望有人告诉我,如果我疯了

我正在做的事情如下:

dci.Controller = Backbone.View.extend({
defaults:function(){
    return {
        views:{},
        modules:{},
        isDestroyed:false,
        destroy:function(){
            if(this.isDestroyed){return;}
            this.isDestroyed = true;
            $.each(this.views,function(i,item){
                item.remove();
            });
            $.each(this.modules,function(i,item){
                item.destroy();
            });
        }
    }
}

});

然后我这样做使用控制器:

dci.AssetController  = dci.Controller.extend({
events:_.extend({ 
    // whatever events here
}, dci.Controller.prototype.events),

initialize:function(options){
    $.extend(this,this.defaults());
}
});

最后我实例化如下:

var controller = new dci.AssetController(someOptions);   

所以现在在我的控制器var上我有一组视图和模块,每个实例都是唯一的,所以如果我出于某种原因有两个dci.AssetCotrollers(实际上我对模块使用相同的模型,这就是你有的时候同一类的多个实例)它们各自拥有自己的视图和模块集合。

这让我有一段时间的杀戮,但我认为这会有效,我特别要感谢Brian Genisio,他让我在上述提到的这条轨道上。

现在请告诉我这是否是一个疯狂的模式。 谢谢, RAIF

1 个答案:

答案 0 :(得分:0)

好吧,如果你要创建一个新的基本视图,你应该坚持使用View术语,而不是之前在后端的控制器......这可能会使某些人感到困惑。

其次,我不知道你是如何设置isDestroyed的。

一般来说,制作层次结构视图对我来说听起来不错(到目前为止我一直手动完成)。不知道你如何使用模块变量。否则,在非包装器视图中,我认为这是额外的初始化代码。