Backbone remove视图删除el

backbone remove view deletes the el

本文关键字:el 删除 视图 remove Backbone      更新时间:2023-09-26

我正在创建一个单页应用程序,而且我对骨干相当陌生。我有一个问题,创建多个视图使用相同的wrapper-div。

我设置:

我为所有视图添加了一个close函数:

Backbone.View.prototype.close = function(){
    this.remove();
    this.off();
    if (this.onClose){
        this.onClose();
    } 
}

我有一个wrapper-div,我想要渲染视图,删除它们并渲染新视图。所以我的SetupView是这样的:

app.SetupView = Backbone.View.extend({
    el: '#my_view_wrapper',
    ...
});

从我交换视图的函数中,我关闭当前(打开)视图,如下所示:

var v = this.model.get('view');
v.close();

我的问题是,我有多个视图使用相同的wrapper-div。但是当我关闭一个视图时,这个wrapper-div似乎被删除了,我试图创建的下一个视图找不到这个div。

我想有一个简单的解决办法吗?我想重用相同的包装器,并且只删除其中的视图,而不是包装器本身。

只是作为一个补充(供以后参考):另一个选项是覆盖子视图remove,这样它只是清空$el而不是删除它。如。

remove: function() {
      this.$el.empty().off(); /* off to unbind the events */
      this.stopListening();
      return this;
}

我个人更喜欢这种方式,因为这样可以避免插入没有实际用途的包装器元素。

在您的场景中,不要使用现有的DOM元素作为"el"值。Backbone将为您创建元素。当您实例化您的视图时,您可以执行以下操作将其附加到现有的包装元素。

$(viewName.render().el).appendTo('#my_view_wrapper');