Javascript 销毁或删除Backbone.js中的视图
我目前正在尝试为视图实现销毁/删除方法,但无法为所有视图提供通用解决方案 我希望会有一个事件附加到控制器,这样当一个新请求通过时,它会破坏以前的视图,然后加载新视图Javascript 销毁或删除Backbone.js中的视图,javascript,javascript-events,backbone.js,Javascript,Javascript Events,Backbone.js,我目前正在尝试为视图实现销毁/删除方法,但无法为所有视图提供通用解决方案 我希望会有一个事件附加到控制器,这样当一个新请求通过时,它会破坏以前的视图,然后加载新视图 有什么方法可以做到这一点而不必为每个视图构建删除函数吗?而不必知道所有信息。。。您可以将重置触发器绑定到模型或控制器: this.bind("reset", this.updateView); 如果要重置视图,请触发重置 对于回调,请执行以下操作: updateView: function() { view.remove();
有什么方法可以做到这一点而不必为每个视图构建删除函数吗?而不必知道所有信息。。。您可以将重置触发器绑定到模型或控制器:
this.bind("reset", this.updateView);
如果要重置视图,请触发重置
对于回调,请执行以下操作:
updateView: function() {
view.remove();
view.render();
};
我必须绝对确保视图不仅从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);
}
对我来说似乎有些过分,但其他方法并没有完全奏效。这就是我一直在使用的方法。没有看到任何问题
destroy: function(){
this.remove();
this.unbind();
}
我知道我来晚了,但希望这对其他人有用。如果您使用的是主干网v0.9.9+,则可以使用、
listenTo
和stopstending
initialize: function () {
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove);
}
stopListening
由remove
自动调用。你可以多读一些,我想这应该行得通
destroyView : function () {
this.$el.remove();
}
根据当前的主干文档 view.remove()
从DOM中删除视图及其el,并调用stopListening以删除该视图已侦听的所有绑定事件。您可以使用该方法解决此问题
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();
})
}
另一种方法:创建一个全局变量,如下所示:\u 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]);
}
初始化:函数(){
this.routerName='home';
_global.routerList.push(this);
}
/*在内存中删除它*/
对于(var i=0;我能举一个你的视图生态系统是什么的例子吗?你的问题让我觉得页面上同时有很多视图。我不能完全想象你想做什么,因此无法提供一个可能是你需要的答案。这些伟大帖子中的一些其他模式:我认为这不对。视图的删除功能在just remove上,该视图的元素来自DOM()。我认为这家伙想要完全删除视图对象。this.remove()最终调用jquery的remove(),这也会删除数据和事件…尽管如此,我认为您还必须调用this.undelegateEvents以解除与其他事件的绑定,例如自定义事件或对模型的更改。this.remove()
调用this.stopListening()
和this。$el.remove()
。第一个删除使用this.listenTo(…)
添加的所有事件侦听器。第二个删除使用jQuery添加的所有事件侦听器。在这两者之间,除非您使用其他方法添加事件侦听器,否则应该涵盖您。因此,这个答案是正确的,并且从我这里得到+1。就我所见,这个.remove()应该调用jQuery的remove,它应该从DOM中删除元素,但也应该删除附加到它的数据和事件。因此,我想对undelegateEvents和removeData的调用应该是不必要的……对吗?@opensas事件一直持续到this.remove()之后,尽管元素已从DOM中删除。this.undelegateEvents()是所有事件解除绑定所必需的。正如我所说,这感觉有些过分,但它确实起到了作用。我喜欢它。尽管你应该使用这个。$el
而不是$(this.el)
;)+1是我问题的好答案,+1是写你的第一个答案:)我的观点不会因为再次破坏和创建它而被重新呈现。是不是因为this.remove()
?也必须使用this.stopListening()
杀死侦听器,然后返回此
,以便更好地衡量第一种方法对我有效,我在视图重影方面遇到了类似的问题,并且在提交表单时重新创建每个视图时都会触发多次事件