我试图通过修改Backbone.View.prototype来删除Backbone中的所有子视图:
_.extend(Backbone.View.prototype, {
childViews:[],
close: function(){
this.remove();
this.unbind();
console.log(this.childViews.length);
_.each(this.childViews,function(childview){
childview.close();
},this);
}
});
因此,当我创建子视图时,我{child} push
。当我close
时,我希望它也可以在childViews上调用close
。如果它在childViews中没有任何内容,那么我希望close
的链停止。
fiddle
最终发生的是某种无限循环。我无法弄清楚它为什么会这样。这是_.each
[context]
的问题吗?有人可以解释我做错了什么以及如何解决这个问题?
答案 0 :(得分:2)
您的问题是您已将childViews: []
添加到原型中。这意味着每个视图实例将共享完全相同的childViews
数组。一旦您在任何地方看到任何子视图,您最终会得到包含this.childViews
的{{1}},并且您的无限循环。
相反,您应该在视图this
中创建childViews
:
initialize
您可能需要更新initialize: function() {
this.childViews = [ ];
//...
}
方法以允许close
undefined
。
更新了小提琴:http://jsfiddle.net/ambiguous/f2ykv/
根据经验,您几乎不需要附加到原型的任何可变属性(例如数组或对象),您几乎总是希望为每个实例分配这些属性。