我正在使用Backbone构建一个网页应用程序。
我的主视图依赖于模板,该模板将根据URL替换页面的主体部分,但由于我必须为该视图提供一个“el”,因此我希望它是模板本身,它将被插入到DOM中的“render”或“initialize”方法中。
但是当我调用新的MyMasterView时,el是未定义的,因为它在示例化时并不存在于DOM中。
我该怎么办呢?
我发现的唯一修复方法是将el设置为替换内容的现有DOM,并在呈现中调用.remove().append(the_template)
,但我不确定这是最好的方法。
2条答案
按热度按时间ntjbwcob1#
我们可以考虑这样一个场景:DOM中有以下div
此div可以是您要插入视图生成的html的任何其他元素。
假设您有以下模板:
您可以将
existing
指定为视图的el
,因为它已经存在于div中。您将遇到的唯一问题是,如果它是某个标记,如body
或其他标记,那么如果您在清除视图时将其从视图中删除(以防止内存泄漏),它将从dom中删除可能不需要的标记。对此解决方案可以是,将
existing
指定为el
,在el
中呈现视图的html,然后在将模板html追加到DOM之后调用setElement
,它将把视图的
el
从existing
(或任何其他DOM元素)更改为inside_template
。因此,在删除el
的同时,inside_template
元素也将被删除,existing
元素在DOM中保持原样。kx7yvsdv2#
你有没有试过让
el
为空而只设置tagName
?如果你这样做了,_ensureElement会为你的视图元素创建一个新的分离的DOM节点。你应该能够呈现一个从页面的DOM分离的DOM片段,然后外部代码可以使用append
或类似jQuery的replaceWith
将该元素放到适当的位置。