2012-07-18 51 views
1

有没有一种方法可以从Prototype中的HTML创建元素,这与jQuery的$('<div>Foo</div>')类似?如何在Prototype中使用HTML创建元素?

基本上,我从Handlebars模板创建HTML块,并希望插入到DOM中,但不想将它包装在其他元素中。

回答

1

我将这个函数作为'静态方法'添加到Mustache中以解决同一个问题。我不相信Prototype有任何内置解决方案。我用隐藏的textareas来保存我的模板代码,因此调用了$F()。最后3行更具体到你的问题 - 创建一个新的div,插入你的应用模板HTML,然后返回第一个后裔(作为一个元素,在这一点上)。这假定你的模板只有一个根元素。

Mustache.createElementFromTemplateId = function(templateId, data) { 
    if (!this.cachedTemplates) this.cachedTemplates = {}; 

    var templateStr = this.cachedTemplates[templateId]; 
    if (!templateStr) { 
     templateStr = $F(templateId); 
     this.cachedTemplates[templateId] = templateStr; 
    } 

    var appliedTemplateStr = this.render(templateStr, data); 

    var div = new Element("div"); 
    div.insert(appliedTemplateStr); 
    return div.firstDescendant(); 
}; 
+1

谢谢。这个'firstDescendant()'是我一直在寻找的。老实说,受不了Prototype。使用jQuery几年,现在必须切换到我的工作原型,我没有得到这个库。就像它是由儿童写的一样。 – 2012-07-19 17:03:10

+1

Whaaa ?!原型是炸弹!我觉得它使用起来非常直观和有趣。我觉得自己像jQuery一样n00b。我想这归结于你第一次接触到的框架。 – dontGoPlastic 2012-07-19 18:20:15

+0

不确定。在jQuery中,您可以通过$('任何HTML代码')声明一个新元素。当您使用微模板并且不想将它们包裹到额外的元素中时特别有用。或者,所有类型的事件绑定(绑定,生活,委托,'点击'等)都非常有用,原型似乎只有'观察'。 – 2012-07-19 18:38:15

相关问题