2014-01-23 51 views
0

我正在创建具有自定义事件的主干视图。如果我删除骨干视图,删除过程取消订阅事件或我必须手动取消订阅事件。如何删除子视图和主视图的事件

同样,我用一些子视图创建了一个主视图。如果我删除了主视图,我的所有子活动都将取消订阅,或者我必须取消订阅子活动并取消订阅主视图事件。

请给我一个方法,我可以删除正确的顺序的意见,以便不会发生内存泄漏。

+0

这取决于你如何申报您的活动,你如何订阅。如果你使用[listenTo](http://backbonejs.org/#Events-listenTo),那么当你删除视图时,它们也应该被删除。看看这个答案http://stackoverflow.com/a/14042632/384985 [Derick Bailey](http://stackoverflow.com/users/93448/derick-bailey) – Jack

回答

0

您需要为每个您的子视图调用remove()方法,然后在视图上调用本机remove()方法。本机删除将停止监听事件并从DOM中删除$el

下面是一个例子:

var View = Backbone.View.extend({ 

    initialize: function() { 
     this.views.my_view_1 = new Backbone.View(); 
     this.views.my_view_2 = new Backbone.View(); 

     return this; 
    }, 

    /* 
    * Remove child views and remove itself 
    */ 
    remove: function() { 
     // Remove the child views 
     Object.keys(this.views).forEach(function(view_name) { 
      if (is(this.views[view_name].remove, "function")) { 
       this.views[view_name].remove(); 
      } 
     }, this); 

     // Call the native remove function. 
     Backbone.View.prototype.remove.apply(this, arguments); 

     // For old browsers we need convert arguments object to Array 
     // Backbone.View.prototype.remove.apply(this, Array.prototype.slice.call(arguments)); 

     return this; 
    } 

});