Backbone.js - 删除所有子视图

teg*_*ggy 19 backbone.js

我有一个顶级的PageView,它会在路由发生变化时重新渲染.我有很多嵌套在这个PageView中的嵌套子视图.如果我要重新渲染PageView,我是否需要删除/取消绑定所有嵌套的子视图以及PageView,还是只需要删除/取消绑定PageView?如果我需要删除/取消绑定所有子视图,那么最好的方法是什么?

Der*_*ley 35

是的,您需要正确删除和取消绑定它们:

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

执行此操作的简单方法是在父视图中存储子视图的数组.然后在close父视图的方法中,遍历数组并close在子视图上调用一个方法:

ParentView = Backbone.View.extend({
  initialize: function(){
    this.childViews = [];
  },

  render: {
    for (var i = 0; i < 10; i++){
      var childView = new ChildView();
      // do stuff with the child view
      this.childViews.push(childView);
    }
  },

  close: function(){
    this.remove();
    this.unbind();
    // handle other unbinding needs, here
    _.each(this.childViews, function(childView){
      if (childView.close){
        childView.close();
      }
    })
  }
});
Run Code Online (Sandbox Code Playgroud)

close当您准备好删除/替换它时,请务必在父视图上调用该方法.这将确保所有孩子都得到适当的清理(假设所有孩子都有自己的close方法).

  • 我仍然使用这里描述的技术.我已经把这个放到了我的Marionette.js Backbone应用程序框架中,所以我不必考虑它了,不过 (2认同)