Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有数组类型属性的jQuery.tmpl问题_Jquery_Jquery Templates - Fatal编程技术网

具有数组类型属性的jQuery.tmpl问题

具有数组类型属性的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{{

我有如下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{{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');