【发布时间】:2012-02-02 03:50:15
【问题描述】:
用一个例子来解释这个问题可能最容易。
我在 HTML 页面中定义了一个车把模板:
<script id="myTemplate" type="text/html">
<h1>{{fieldname}}</h1>
</script>
我用把手渲染模板:
var source = $("#myTemplate").html();
var template = Handlebars.compile(source);
var txt = template(jsonObj);
并且 txt 最终包含呈现的 html 文本。没问题。
但是……
假设我通过 ajax 检索了一个 XML 文件,我想使用 jquery 来访问它以呈现元素。
例如,为了从父元素中检索“name”子元素的值,我可能会像这样使用 jquery:
$(xml).find('name').text()
所以,我认为我的模板可能看起来像这样:(注意这不起作用!)
<script id="myTemplate" type="text/html">
<h1>{{$(this).find('name').text()}}</h1>
</script>
编辑:显然,这是行不通的。
我也试过
{{this.find('name').text()}}
甚至
{{.find('name').text()}}
但是这些都不起作用,到目前为止,我还找不到任何可以执行此类操作的 JS 模板系统。车把和 DUST 似乎最有可能做到这一点,但到目前为止我还没有运气。
我已经看到一些迹象表明我可以将 XML 转换为 JSON 并将其作为上下文传递,这可能确实是唯一的方法。
比我想象的要容易吗?不可能?
编辑: 经过更多的挖掘,似乎没有一个 Javascript 的模板解决方案可以与数据上下文的 JSON 或 XML Dom 对象互换。他们似乎都假设为 json。
太棒了...我使用了许多可用于转换 xml2json 的 jquery 插件之一,并将该对象传递给 HandleBars,一切正常。
我遇到的唯一技巧是,如果您对 XML 数据执行 JQUERY 查询以查找特定元素,您得到的是一个 XML dom 对象的数组,即使只有 1 个结果。
所以,我不得不这样做:
var txt = template($.xml2json($(xml).find('myelementname')[0]));
一切都很好。
我可能会提出另一个问题,关于是否有人知道接受 json 或 xml dom 对象的 Javascript 模板引擎。
【问题讨论】:
-
我将把答案交给 Shankar,因为 dot.js 实际上非常接近。我想我更喜欢 Handlebars 和 Mustache 的无逻辑模板设计,但 dot.js 绝对有用。
标签: jquery templates handlebars.js