我目前正在尝试实现视图的销毁/移除方法,但我无法找到适用于所有视图的通用解决方案。
我希望能够将事件附加到控制器上,这样当一个新请求进来时,它可以销毁先前的视图然后加载新的视图。
有没有办法在不必为每个视图构建删除函数的情况下实现这一点?
我目前正在尝试实现视图的销毁/移除方法,但我无法找到适用于所有视图的通用解决方案。
我希望能够将事件附加到控制器上,这样当一个新请求进来时,它可以销毁先前的视图然后加载新的视图。
有没有办法在不必为每个视图构建删除函数的情况下实现这一点?
我必须绝对确定该视图不仅已从DOM中删除,而且还完全解除了事件绑定。
destroy_view: function() {
// COMPLETELY UNBIND THE VIEW
this.undelegateEvents();
this.$el.removeData().unbind();
// Remove view from DOM
this.remove();
Backbone.View.prototype.remove.call(this);
}
对我来说,这似乎有点过度,但其他方法并没有完全解决问题。
this.$el
而不是$(this.el)
;) - mreqthis.remove()
的缘故吗? - Raeesaa如果不知道所有的信息...你可以将重置触发器绑定到你的模型或控制器:
this.bind("reset", this.updateView);
当您想要重置视图时,触发重置操作。
对于您的回调函数,请执行以下操作:
updateView: function() {
view.remove();
view.render();
};
this.remove()
调用了 this.stopListening()
和 this.$el.remove()
。前者会移除所有通过 this.listenTo(...)
添加的事件监听器,后者会移除所有通过 jQuery 添加的事件监听器。使用这两个方法,你应该就可以涵盖大部分情况,除非你使用了其他方式添加事件监听器。因此,这个答案是正确的并且我会给它一个 +1。 - chowey这是我一直在使用的。没有发现任何问题。
destroy: function(){
this.remove();
this.unbind();
}
根据当前 Backbone 的文档...
view.remove()
从 DOM 中移除一个视图和它的 el,并调用 stopListening 方法来删除该视图已经监听 (listenTo'd) 的所有绑定事件。
我认为这应该可以工作
destroyView : function () {
this.$el.remove();
}
this.stopListening()
来终止监听器,然后为了保险起见,加上 return this
。 - Brandon你可以使用这种方法来解决问题!
initialize:function(){
this.trigger('remove-compnents-cart');
var _this = this;
Backbone.View.prototype.on('remove-compnents-cart',function(){
//Backbone.View.prototype.remove;
Backbone.View.prototype.off();
_this.undelegateEvents();
})
}
_global.routerList
。initialize:function(){
this.routerName = 'home';
_global.routerList.push(this);
}
/*remove it in memory*/
for (var i=0;i<_global.routerList.length;i++){
Backbone.View.prototype.remove.call(_global.routerList[i]);
}