骨干视图上的this.remove()使el消失

时间:2013-11-06 20:28:21

标签: javascript html backbone.js

参考这篇文章:Backbone.js : repopulate or recreate the view?

我基本上使用的是投票率最高的,但在路由器显示视图时却没有接受的答案。

所以我基本上打电话给

this.unbind();
this.remove();

我遇到的问题是我有一个左侧导航面板,然后在右边我有我的内容。它看起来像这样:

<div class="container-fluid">
    <div class="row-fluid">
        <div class="span2">
            // nav bar stuff
        </div>
        <div class="span10">
            <div id="content-container"></div>
        </div>
    </div>
</div>

所以当我在一个视图上调用this.remove()时,它基本上留给我:

<div class="span10"></div>

div容器消失。我不知道删除主干视图或插入<div id="content-container"></div>的最佳方法是什么。我想当我处理我的视图,并在调用remove()之后,我可以查看DOM并插入内容容器,但似乎应该有更好的方法。有什么想法吗?提前致谢。

1 个答案:

答案 0 :(得分:2)

来自fine manual

  

删除 view.remove()

     

从DOM中删除视图,并调用 stopListening 以删除视图 listenTo '的任何绑定事件。

The implementation几乎是将英语转换为JavaScript的短语:

remove: function() {
  this.$el.remove();
  this.stopListening();
  return this;
}

this.$el.remove()调用会从DOM中删除该元素。

您的问题是,您正在使用此视图el

<div id="content-container"></div>

因此view.remove()会删除您的#content-container

有解决方案:

  1. 让视图创建自己的el,然后将放在 #content-container内。
  2. 覆盖remove方法:

    remove: function() {
        this.unbind();
        this.stopListening();
        // No this.$el.remove() since we don't own the `el`
        return this;
    }