backbone remove view删除el

时间:2012-12-29 16:39:14

标签: javascript jquery backbone.js backbone-views

我正在创建一个单页应用程序,我对骨干很新。我在创建使用相同wrapper-div的多个视图时遇到问题。

我的设置:

我为所有观点添加了一个关闭功能:

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。

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

2 个答案:

答案 0 :(得分:25)

只是添加(供以后参考):另一个选项是覆盖子视图remove,以便它只清空$el而不是删除它。例如。

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

我个人更喜欢这个,因为它不需要插入没有实际用途的包装元素。

答案 1 :(得分:17)

在您的方案中,请勿使用现有DOM元素作为“el”值。 Backbone将为您创建元素。实例化视图时,可以执行以下操作将其附加到现有的包装元素。

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