强制性jsFiddle example。
当我通过jQuery的$.each
函数运行一个字符串数组时,我得到了我期望的结果。
$.each(["abc", "123", "def", "456"], function (i, val) {
$("<li></li>").text("source[" + i + "]: " + val).appendTo(".eachResults");
// run for each string in the array ("abc", "123", ...)
});
当我通过jQuery Template的{{each}}
运算符运行相同的字符串数组时,它会将其视为char
s的二维数组。
<script id="testTemplate" type="text/x-jquery-tmpl">
<ul>
{{each(i, prop) $data}}
{{if $data.hasOwnProperty(i)}}
<li>
source[${i}]: ${$data[i]}
{{! run for each char of each string in array (0:"a", 1:"b", 2:"c", 0:"1", 1:"2", 3:"3", ...)}}
</li>
{{/if}}
{{/each}}
</ul>
</script>
$("#testTemplate").tmpl(["abc", "123", "def", "456"]).appendTo(".tmplResults");
由于模板中的i
似乎总是正确引用到$data
,因此我根本不知道这个索引是如何工作的。似乎i
需要是一个二维索引才能正常工作,但它似乎不是(typeof (i) === "number"
)。
@ mblase75当然在这里解释了这个问题。不幸的是,鉴于这是我实际代码的一部分,结果只是提出了一个不同的question about recursively calling an {{each}}
template when you come across an array of strings。
答案 0 :(得分:4)
请记住,模板是一个隐式循环。您的原始{{each}}
循环遍历每个字符串中的每个字符 - 模板循环遍历数组中的每个字符串。
这将为您提供所需的结果(或多或少):
<script id="testTemplate" type="text/x-jquery-tmpl">
<li>
source[]: ${$data}
</li>
</script>
http://jsfiddle.net/wuEyp/10/使用上述代码。索引消失了,因为模板似乎没有在“根”级别提供它。
http://jsfiddle.net/wuEyp/11将使用函数添加索引。出于某种原因,我无法通过闭合来正确地做到这一点。