【发布时间】:2012-03-04 03:39:26
【问题描述】:
为了避免重复,我尝试在服务器端和客户端都使用 mustache 进行模板化。我有一个类似以下的模板:
<html>
<head>...</head>
<body>
<table>
<tbody id="#this">
{{rows}}
<tr>{{row}}<tr>
{{/rows}}
</tbody>
</table>
</body>
</html>
这对我的服务器端模板非常有用。然而,在客户端,我遇到了一些麻烦。我可以使用 ajax 成功加载模板,但我不需要整个东西来更新表的行。
$(function () {
var template;
$.ajax('templates/thetemplate.mustache', {
success : function (data) {
template = $('#this', data).html();
},
dataType : 'html'
});
});
当我使用上面的 jQuery 获取 #this 元素的内容时,{{rows}} 和 {{/rows}} 行从结果中被删除,而它们之间的 <tr>{{row}}</tr> 被成功返回。如何获取全部内容?
我试过$('#this', data).contents(); 给出相同的结果,$('#this', data).val(); 返回一个空字符串。改用$(data).find('#this') 会得到相同的三个结果。我还尝试将 ajax 调用的 dataType 设置为 'text',但没有明显效果。
我意识到我可以通过使用部分来完成我想要的(不复制我的模板的一部分以供客户端和服务器端使用),并且它还有一个额外的好处是可以避免传输比我实际需要的更多的模板给客户只是把它扔掉,但这并不能回答我的问题。 (感谢巧妙的解决方案)
谢谢
【问题讨论】:
-
我也可以使用整个模板并在 Mustache 渲染之后进行 jQuery 选择,如下所示: var render = Mustache.render(wholetemplate, data); $('#this').html($('#this',rendered).html());但我宁愿只得到我需要的模板部分。
标签: javascript jquery mustache