2012-07-18 22 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