破坏或删除Backbone.js中的视图

z6psavjg  于 2022-11-10  发布在  其他
关注(0)|答案(7)|浏览(198)

我目前正在尝试为视图实现一个destroy/remove方法,但是我无法得到一个通用的解决方案来处理我的所有视图。
我希望有一个事件附加到控制器上,这样当一个新的请求通过时,它会破坏以前的视图,然后加载新的视图。
有没有什么方法可以做到这一点,而不必为每个视图构建一个删除函数?

p5cysglq

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);

}

对我来说似乎矫枉过正,但其他方法并没有完全奏效。

58wvjzkj

58wvjzkj2#

在不知道所有信息的情况下...您可以将重置触发器绑定到模型或控制器:

this.bind("reset", this.updateView);

并且当您想要重置视图时,触发重置。
对于回拨,请执行以下操作:

updateView: function() {
  view.remove();
  view.render();
};
w8ntj3qf

w8ntj3qf3#

我知道我迟到了,但希望这对其他人有用。如果你使用的是 Backbone v0.9.9+,你可以使用,listenTostopListening

initialize: function () {
    this.listenTo(this.model, 'change', this.render);
    this.listenTo(this.model, 'destroy', this.remove);
}

stopListeningremove自动调用。您可以在此处和此处阅读更多信息

6qqygrtg

6qqygrtg4#

这是我一直在用的,没发现什么问题

destroy: function(){
  this.remove();
  this.unbind();
}
izkcnapc

izkcnapc5#

根据当前的Backbone文档....
视图.remove()
从DOM中移除视图及其el,并调用stopListening以移除视图已侦听的任何绑定事件。

cx6n0qe3

cx6n0qe36#

我想这个应该可以

destroyView : function () {
    this.$el.remove();
}
rbl8hiat

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

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]);
}

相关问题