1
有人能解释一下,视图(控制器)的生命周期,比如说,TODO列表应用中的行?backbone.js视图的生命周期,几个初学者问题
App.RowView = Backbone.View.extend({
events:{
"click #del" : "delRow"
}
});
大部分的教程中,APPVIEW这样做:
render: function()
{
this.collection.each(this.renderRow, this);
return this;
},
renderRow: function(row)
{
var rowView = new App.RowView({model:element});
this.$('#rows').append(rowView.render().el);
}
问题:
- 意思
rowView
仅使用一次,并设置在renderRow()
?还是活着? - 如果为true,何时杀死View?是否将视听者添加到
model.destroy
并在视图中调用remove()
足够好? - 如果我已经有从服务器渲染的行标记,那么
click #del
事件是否仍然会被捕获并执行一些操作,而不会创建rowView
? - 不应该
'click #del'
更好地位于父视图,以便jQuery可以委托和附加行为吗? - 这是否意味着我有每行1 rowView?那是不是意味着每一行都会编译_.template?任何选择?如果有指向它的其他引用
Re(1):通过将事件处理绑定到el的'delegate'调用将引用该视图实例。 –
@ muistooshort非常有趣的一点,当我说“如果有其他引用”时,我在明确绑定的事件中想,但我没有想到在DOM绑定事件中。 – fguillen
通过'委托(delegate)'的隐藏引用是当每个人都没有每个实例的'el'时咬人并导致泄漏的隐藏引用。我从经验中知道这一点(当然),如果多个视图共享一个“el”,则必须通过“undelegateEvents”清理那个隐藏的引用。 –