1

有人可以解释一下,视图(控制器)的生命周期是什么,例如,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);
    }

问题:

  1. 这是否意味着rowView只使用一次并丢弃renderRow()?还是它继续存在?
  2. 如果是真的,什么时候杀死视图?添加监听器并在视图中model.destroy调用是否足够好?remove()
  3. 如果我已经从服务器呈现了行的标记,click #del事件是否仍会被捕获并做一些没有rowView创建的事情?
  4. 'click #del'应该更好地位于父视图中,以便 jQuery 可以在那里委托和附加行为?
  5. 这是否意味着我每行有 1 个 rowView?这不意味着 _.template 正在每一行上编译吗?有什么选择吗?
4

1 回答 1

2
  1. 引用死亡,如果有其他引用指向它,视图可以保留
  2. 您在不再需要视图时杀死视图,通常是在不再可见时。如果您的视图正在绑定任何事件,您必须在调用之前取消绑定它们remove()在主干中管理视图的模式
  3. 必须实例RowView化 的实例才能捕获事件。
  4. 这取决于您正在寻找的行为,但在您的示例中,我认为每个视图都必须捕获每个自己的click #del事件,如果您在父视图中声明事件,您如何知道要删除的行?
  5. 通常,您在视图定义中声明模板,并将其编译后的版本分配为this.templatetemplate: _.template( "hello: <%= name %>" );.
于 2012-06-04T18:34:39.623 回答