有人可以解释一下,视图(控制器)的生命周期是什么,比如,对于 TODO 列表应用程序中的行?
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()
中处置? 还是它继续存在? - 如果为真,何时杀死视图? 将侦听器添加到
model.destroy
并在视图中调用remove()
是否足够好? - 如果我已经从服务器渲染了行的标记,
click #del
事件是否仍会被捕获并在没有创建rowView
的情况下执行某些操作? 'click #del'
不应该更好地位于父视图中,以便 jQuery 可以在那里委派和附加行为吗?- 这是否意味着我每行有 1 个行视图? 这是否意味着每行都在编译 _.template?还有其他选择吗?
- 引用
- 将死亡,如果有其他引用指向它,则视图可以保留。
- 当不再需要时,您可以杀死视图,通常在不再可见时杀死视图。如果您的视图正在绑定任何事件,则必须在调用之前取消绑定
remove()
: 用于管理主干网中视图的模式 - 必须实例化
RowView
实例才能捕获事件。 - 这取决于您要查找的行为,但是在您的示例中,我认为每个视图都必须捕获每个自己的
click #del
事件,如果您在父视图中声明事件,您如何知道要删除的行? - 通常,您在视图定义中声明模板,并将其编译版本分配给
this.template
,如下所示:template: _.template( "hello: <%= name %>" );
.