具有数组类型属性的jQuery.tmpl问题
我有如下Javascript对象:具有数组类型属性的jQuery.tmpl问题,jquery,jquery-templates,Jquery,Jquery Templates,我有如下Javascript对象: var data = { Id: 1, Name: "Some name", Days: [true, true, true, false, false, true, false] }; 这些对象是在客户机上生成的,我想使用jQuery.tmpl插件将它们可视化。我已将模板定义为: <ul class="days"> {{each Days}} <li class="day {{if $value}}on{{
var data = {
Id: 1,
Name: "Some name",
Days: [true, true, true, false, false, true, false]
};
这些对象是在客户机上生成的,我想使用jQuery.tmpl插件将它们可视化。我已将模板定义为:
<ul class="days">
{{each Days}}
<li class="day {{if $value}}on{{else}}off{{/if}}">${$index + 1}</li>
{{/each}}
</ul>
{{每天}
- ${$index+1}
{{/每个}}
当我打电话时
$("<ul class='days'>...</ul>").tmpl(data);
$(“…
”).tmpl(数据);
我只得到一组LI
元素,周围没有包装UL
我在这里遗漏了什么?我创建了一个。
模板
<script id="daysTemplate" type="text/x-jquery-tmpl">
<ul class="days">
{{each Days}}
<li class="day {{if $value}}on{{else}}off{{/if}}">${$index + 1}</li>
{{/each}}
</ul>
</script>
您需要将该模板代码移动到
元素(如果尚未移动),如下所示:
<script type="text/x-jquery-tmpl" id="daysTemplate">
<ul class="days">
{{each Days}}
<li class="day {{if $value}}on{{else}}off{{/if}}">${$index + 1}</li>
{{/each}}
</ul>
</script>
// You can inject the result into any container, using methods like appendTo()
// html(), insert(), etc.
$('#daysTemplate').tmpl(data).appendTo('body');
你说得对。我真傻。我必须将我的模板包装到一些元素中<代码>在以字符串形式提供模板时实际上不是必需的。我试着把它包装在
标签中,效果也不错<当模板是页面标记的一部分时,当然强烈建议使用code>。但您将我的模板包装到元素中的想法是对的。接受您的答案。您是对的,将整个模板内联定义为字符串是有效的。不过,仅供参考,避免这种情况的一个原因是当您使用脚本容器(或其他命名容器元素)时,.tmpl()
会自动缓存已编译的模板函数,而当您提供任意字符串时则不会。因此,使用脚本容器方法在相同的页面视图中重复渲染会更快。这是有价值的信息。虽然我的模板在页面加载时呈现一次,之后只有在用户在下拉列表中更改选择时才会呈现,但这种情况很少发生。缓存在每个页面的生命周期内工作,所以页面的重新加载频率比模板的重复使用频率更高。但在其他情况下使用模板时必须记住这一点(我这样做了,幸运的是,在这些情况下我已经在使用script
tag)。如果可以的话,我会再次投票支持你。+1:你说我的模板有效,这是对的。但最主要的是它必须被包装到一个标记中(在您的例子中,它是script标记)。
// You can inject the result into any container, using methods like appendTo()
// html(), insert(), etc.
$('#daysTemplate').tmpl(data).appendTo('body');