backbone.js视图的生命周期,几个初学者问题

backbone.js视图的生命周期,几个初学者问题,backbone.js,Backbone.js,有人能解释一下,视图(控制器)的生命周期是什么,比如说,TODO列表应用程序中的一行 App.RowView = Backbone.View.extend({ events:{ "click #del" : "delRow" } }); 在大多数教程中,AppView都会这样做: render: function() { this.collection.each(this.renderRow, this); ret

有人能解释一下,视图(控制器)的生命周期是什么,比如说,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()中处理?或者它是活的
  • 如果为true,则何时终止视图?在视图中将侦听器添加到
    model.destroy
    并调用
    remove()
    是否足够好
  • 如果我已经从服务器呈现了行的标记,
    click#del
    事件是否仍会被捕获,并在不创建
    rowView
    的情况下执行某些操作
  • 'click#del'
    不应该更好地位于父视图中,以便jQuery可以在那里委托和附加行为吗
  • 这是否意味着我每行有一个行视图?这难道不意味着每一行都在编译u.template吗?还有别的选择吗
  • 引用消失,如果有其他引用指向该视图,则该视图可以保留
  • 当不再需要视图时(通常是当视图不再可见时),可以终止视图。如果视图正在绑定任何事件,则必须在调用
    remove()
    之前解除绑定:
  • 必须实例化
    RowView
    的实例才能捕获事件
  • 这取决于您正在寻找的行为,但在您的示例中,我认为每个视图都必须捕获每个自己的
    单击#del
    事件,如果您在父视图中声明该事件,您如何知道要删除哪一行
  • 通常,您在视图定义中声明模板,并将其编译版本分配给
    this.template
    ,如下所示:
    template:uu.template(“hello:”)
    
    Re(1):通过将事件处理绑定到
    el
    @muistooshort的
    delegate
    调用,将有对该视图实例的引用。非常有趣的一点,我在说“如果有其他引用”时,正在考虑显式绑定的事件但是我没有想到DOM绑定的事件。通过
    delegate
    隐藏的引用会咬到每个人,当他们没有每个视图实例
    el
    时会导致泄漏。我从经验中了解到这一点(当然),如果多个视图共享一个
    el
    @muistooshort,那么您必须通过
    undelegateEvents
    清理隐藏的引用。这是否意味着我们应该调用
    remove()
    undelegateEvents()
    ?甚至没有提到
    undelegateEvents()
    我认为@muistooshort所说的情况是当您的视图使用共享的
    el
    时,您不能调用
    View.remove()
    但是如果不是这样,请调用
    View.remove()
    将删除所有绑定的DOM元素以及它们对视图的所有引用。