Backbone.js 如何删除子视图和主视图的事件
我正在创建一个带有自定义事件的主干视图。如果我删除主干视图,则删除进程将取消订阅事件,或者我必须手动取消订阅事件 类似地,我创建了一个主视图和一些子视图。如果我删除主视图,我的所有子事件是否都将取消订阅,或者我必须取消订阅子事件并取消订阅主视图事件 请向我建议一种方法,在这种方法中,我可以按正确的顺序删除视图,这样就不会发生内存泄漏。您需要为每个子视图调用remove方法,然后在视图上调用native remove方法。Native remove将停止侦听事件并从DOM中删除$el 以下是一个例子:Backbone.js 如何删除子视图和主视图的事件,backbone.js,Backbone.js,我正在创建一个带有自定义事件的主干视图。如果我删除主干视图,则删除进程将取消订阅事件,或者我必须手动取消订阅事件 类似地,我创建了一个主视图和一些子视图。如果我删除主视图,我的所有子事件是否都将取消订阅,或者我必须取消订阅子事件并取消订阅主视图事件 请向我建议一种方法,在这种方法中,我可以按正确的顺序删除视图,这样就不会发生内存泄漏。您需要为每个子视图调用remove方法,然后在视图上调用native remove方法。Native 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;
}
});
这取决于您如何声明活动以及如何订阅活动。如果使用,则在删除视图时也应删除它们。看看这个答案