我目前正在尝试为视图实现一个destroy/remove方法,但是我无法得到一个通用的解决方案来处理我的所有视图。我希望有一个事件附加到控制器上,这样当一个新的请求通过时,它会破坏以前的视图,然后加载新的视图。有没有什么方法可以做到这一点,而不必为每个视图构建一个删除函数?
p5cysglq1#
我必须绝对确保视图不仅从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); }
对我来说似乎矫枉过正,但其他方法并没有完全奏效。
58wvjzkj2#
在不知道所有信息的情况下...您可以将重置触发器绑定到模型或控制器:
this.bind("reset", this.updateView);
并且当您想要重置视图时,触发重置。对于回拨,请执行以下操作:
updateView: function() { view.remove(); view.render(); };
w8ntj3qf3#
我知道我迟到了,但希望这对其他人有用。如果你使用的是 Backbone v0.9.9+,你可以使用,listenTo和stopListening
listenTo
stopListening
initialize: function () { this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); }
stopListening由remove自动调用。您可以在此处和此处阅读更多信息
remove
6qqygrtg4#
这是我一直在用的,没发现什么问题
destroy: function(){ this.remove(); this.unbind(); }
izkcnapc5#
根据当前的Backbone文档....视图.remove()从DOM中移除视图及其el,并调用stopListening以移除视图已侦听的任何绑定事件。
cx6n0qe36#
我想这个应该可以
destroyView : function () { this.$el.remove(); }
rbl8hiat7#
你可以用这个办法解决问题!
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
_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]); }
7条答案
按热度按时间p5cysglq1#
我必须绝对确保视图不仅从DOM中删除,而且完全与事件解除绑定。
对我来说似乎矫枉过正,但其他方法并没有完全奏效。
58wvjzkj2#
在不知道所有信息的情况下...您可以将重置触发器绑定到模型或控制器:
并且当您想要重置视图时,触发重置。
对于回拨,请执行以下操作:
w8ntj3qf3#
我知道我迟到了,但希望这对其他人有用。如果你使用的是 Backbone v0.9.9+,你可以使用,
listenTo
和stopListening
stopListening
由remove
自动调用。您可以在此处和此处阅读更多信息6qqygrtg4#
这是我一直在用的,没发现什么问题
izkcnapc5#
根据当前的Backbone文档....
视图.remove()
从DOM中移除视图及其el,并调用stopListening以移除视图已侦听的任何绑定事件。
cx6n0qe36#
我想这个应该可以
rbl8hiat7#
你可以用这个办法解决问题!
另一种方法:创建一个全局变量,如下所示:
_global.routerList