改变Ractive Object的元素

时间:2013-11-08 09:57:11

标签: ractivejs

在我们的项目中,我们将Ractive与Backbone一起使用。 Backbone.View有一个“setElement”方法,它基本上设置了Backbone.View的el属性,从而允许将View附加到DOM的不同元素。 我想知道Ractive对象是否有类似的功能。 简单地改变Ractive对象的el属性并不成功。

var oRactive = new Ractive(
{
    "data": someData,
    "el": someDomElement,
    "template": someTemplate
});

// ... after doing some other stuff we'd like to set oRactive do a different el

// this.doesn't do the trick
oRactive.el = someOtherDomElement;

// this puts the renderedHTML in our DOM element but binding doesn't work
$(someOtherDomElement).html(oRactive.renderedHTML());

上述不起作用我并不感到惊讶。问题是:有没有办法让它发挥作用或通常是不可能的?

我知道我可以将oRactive.el附加到“someOtherDomElement”,但这不是我想要的。

1 个答案:

答案 0 :(得分:0)

这不是Ractive目前支持的内容,尽管将来可能会支持。您可以尝试执行以下操作:

frag = document.createDocumentFragment();

// move contents into the document fragment...
while ( oRactive.el.firstChild ) {
  frag.appendChild( oRactive.el.firstChild );
}

// ...then into the DOM
someOtherDomElement.appendChild( frag );

// update oRactive.el so oRactive.find() still works
oRactive.el = someOtherDomElement;

Ractive存储对单个节点的引用 - 在大多数情况下,它不关心DOM的实际形状,并且您的情况不应该构成任何障碍(尽管我有兴趣知道您是否遇到任何错误这样做。)