1

我正在使用 Backbone 构建单个网页应用程序。

我的主视图依赖于模板,该模板将根据 URL 替换我的页面的正文部分,但由于我必须为该视图提供一个“el”,我希望它是模板本身,它将插入到 DOM 中“渲染”或“初始化”方法。

但是当我调用 new MyMasterView 时,el 是未定义的,因为它在实例化时不存在于 DOM 中。

我能怎么做 ?

我发现的唯一解决方法是将 el 设置为我替换内容的现有 DOM,并.remove().append(the_template)在渲染中调用 a ,但我不确定这是最好的方法。

4

2 回答 2

3

我们可以考虑一个场景,你在 DOM 中有以下 div

<div id="existing">

</div>

此 div 可以是您想要插入视图生成的 html 的任何其他元素。

假设,您有以下模板,

<div id="inside_template">
  <!-- content of the template goes here -->
</div>

您可以将视图指定existingel视图,因为它已经存在于 div 中。您将遇到的唯一问题是,如果它是某个标签之类的body东西,那么如果您在清除视图时将其从视图中删除(以防止内存泄漏),它将从 dom 中删除可能不需要的标签。

一个解决方案可以是,指定existingel,在其中渲染视图的 html,然后在将模板 html 附加到 DOMel之后立即调用,例如,setElement

render : function() {
  this.$el.html(this.template());
  this.setElement("#inside_template");

  // another render method content
}

这将做的是,它将el视图从existing(或任何其他 DOM 元素)更改为inside_template. 因此,在删除el,元素时,inside_template元素将被删除,保持existing元素在 DOM 中的原样。

于 2012-12-07T06:13:44.190 回答
0

您是否尝试过离开elnull 而只是设置tagName?如果你这样做,_ensureElement将为你的视图元素创建一个新的分离的 DOM 节点。您应该能够呈现与页面的 DOM 分离的 DOM 片段,然后外部代码可以使用append或者可能类似于 jQuery 的replaceWith.

于 2012-12-07T05:18:11.783 回答