使用尚未创建的el的 Backbone.js ?

ha5z0ras  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(121)

我正在使用Backbone构建一个网页应用程序。
我的主视图依赖于模板,该模板将根据URL替换页面的主体部分,但由于我必须为该视图提供一个“el”,因此我希望它是模板本身,它将被插入到DOM中的“render”或“initialize”方法中。
但是当我调用新的MyMasterView时,el是未定义的,因为它在示例化时并不存在于DOM中。
我该怎么办呢?
我发现的唯一修复方法是将el设置为替换内容的现有DOM,并在呈现中调用.remove().append(the_template),但我不确定这是最好的方法。

ntjbwcob

ntjbwcob1#

我们可以考虑这样一个场景:DOM中有以下div

<div id="existing">

</div>

此div可以是您要插入视图生成的html的任何其他元素。
假设您有以下模板:

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

您可以将existing指定为视图的el,因为它已经存在于div中。您将遇到的唯一问题是,如果它是某个标记,如body或其他标记,那么如果您在清除视图时将其从视图中删除(以防止内存泄漏),它将从dom中删除可能不需要的标记。
对此解决方案可以是,将existing指定为el,在el中呈现视图的html,然后在将模板html追加到DOM之后调用setElement

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

  // another render method content
}

它将把视图的elexisting(或任何其他DOM元素)更改为inside_template。因此,在删除el的同时,inside_template元素也将被删除,existing元素在DOM中保持原样。

kx7yvsdv

kx7yvsdv2#

你有没有试过让el为空而只设置tagName?如果你这样做了,_ensureElement会为你的视图元素创建一个新的分离的DOM节点。你应该能够呈现一个从页面的DOM分离的DOM片段,然后外部代码可以使用append或类似jQuery的replaceWith将该元素放到适当的位置。

相关问题