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

时间:2012-06-04 18:01:28

标签: backbone.js

有人可以解释一下,对于TODO列表应用中的一行,View(控制器)的生命周期是什么?

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. 如果是真的,何时杀死View?是在model.destroy添加监听器并在视图中调用remove()足够好吗?
  3. 如果我已经从服务器呈现了行的标记,那么click #del事件是否仍会被捕获并执行rowView创建的内容?
  4. 不应该'click #del'更好地位于父视图中,以便jQuery可以在那里委托和附加行为吗?
  5. 这是否意味着我每行有1个rowView?不意味着每一行都会编译_.template吗?任何替代方案?

1 个答案:

答案 0 :(得分:2)

  1. 如果有其他引用指向引用,则视图会一直存在。
  2. 您不再需要杀死视图,通常在不再可见时。如果您的视图绑定任何事件,您必须在调用remove()之前解除绑定:Pattern to manage views in backbone
  3. 必须为要捕获的事件实例化RowView的实例。
  4. 这取决于您要查找的行为,但在您的示例中,我认为每个View都必须捕获每个自己的click #del事件,如果您在父视图中声明事件,您如何知道要删除的行?
  5. 通常,您在视图定义中声明模板,并将已编译的版本分配给this.template,如下所示:template: _.template( "hello: <%= name %>" );