我想在受到这2篇博文
的启发后试用jQuery模板嗯,这对我来说不太合适。如果我在页面上有模板代码,它可以正常工作,但远程加载对我不起作用。看来模板正在被检索好。这有什么不对?
外部模板:
<script id="contactsTemplate" type="text/x-jquery-tmpl">
<table class="contacts">
<thead><tr><td class="ui-helper-hidden">Id</td><td>Name</td><td>City</td><td>State</td></tr></thead>
<tbody>
{{each contact}}
{{tmpl($value) '#contactTemplate'}}
{{/each}}
</tbody>
</table>
</script>
<script id="contactTemplate" type="text/x-jquery-tmpl">
<tr><td class="ui-helper-hidden">${id}</td><td>${name}</td><td>${city}</td><td>${state}</td></tr>
</script>
在我的页面上,我使用此代码检索并加载模板:
var contacts = {
contact: [
{ id: 1, name: "John Green", city: "Orange Beach", state: "AL" },
{ id: 2, name: "Sam Thompson", city: "Pensacola", state: "FL" },
{ id: 3, name: "Mary Stein", city: "Mobile", state: "AL" }
]
};
$("#ShowDataRemote").button().click(function() {
$.get('templates/Contact.htm', function(template) {
alert(template);
$.tmpl(template, contacts).appendTo("body");
alert("async done");
});
});
关于Encosia的新博客文章解释了这个问题和答案......
http://encosia.com/2010/12/02/jquery-templates-composite-rendering-and-remote-loading/
答案 0 :(得分:3)
这种简单的远程加载技术不适用于复合模板,因为您加载的字符串本身不是有效的模板。您可以通过更改单击处理程序来实现它:
$("#ShowDataRemote").button().click(function() {
$.get('templates/Contact.htm', function(template) {
// Inject the template script blocks into the page.
$('body').append(template);
// Use those templates to render the data.
$('#contactsTemplate').tmpl(contacts).appendTo("body");
});
});
答案 1 :(得分:0)
您可以将模板字符串编译为“命名模板”,如此引用:https://stackoverflow.com/a/4366280/1274343