Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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模板{{each}}标记与jQuery$.each对JavaScript字符串数组的解释不同?_Jquery_Jquery Templates - Fatal编程技术网

为什么jQuery模板{{each}}标记与jQuery$.each对JavaScript字符串数组的解释不同?

为什么jQuery模板{{each}}标记与jQuery$.each对JavaScript字符串数组的解释不同?,jquery,jquery-templates,Jquery,Jquery Templates,必须的 当我通过jQuery的$运行字符串数组时,每个函数都会得到我想要的结果 $.each(["abc", "123", "def", "456"], function (i, val) { $("<li></li>").text("source[" + i + "]: " + val).appendTo(".ea

必须的

当我通过jQuery的
$运行字符串数组时,每个
函数都会得到我想要的结果

$.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", ...)
});
由于模板中的
i
似乎总是正确地引用到
$data
,因此我根本不知道这个索引是如何工作的。似乎
i
需要是一个二维索引才能正常工作,但它似乎不是(
typeof(i)==“number”

跟进问题
@mblase75当然在这里解释了这个问题。不幸的是,考虑到这是我实际代码的一个子集,结果只是带来了一个不同的循环。

记住模板是一个隐式循环。原始的
{{each}
在每个字符串中的每个字符之间循环--模板在数组中的每个字符串之间循环

这将为您提供所需的结果(或多或少):


  • 来源[]:${$data}
  • 使用上述代码。索引消失了,因为模板似乎没有在“根”级别提供索引


    将使用函数重新添加索引。由于某些原因,我无法使用闭包正确地完成此操作。

    请记住,模板是一个隐式循环。原始的
    {{each}
    在每个字符串中的每个字符之间循环--模板在数组中的每个字符串之间循环。将重新添加索引。出于某种原因,我不能用结束语来恰当地回答……我认为你的第一个评论就是这个问题的实际答案(仍然是肯定的)。只要编辑你自己的答案,把你的评论放在那里,我可能最终会接受它。我肯定会把这个问题称为好问题,然后开始一个比这个更具体的新问题。我的问题是递归{{each}}模板(基本JS反射)对字符串数组的影响太深。我只需要弄清楚如何在这样的数组上设置递归的快捷方式。这就是我试图删掉足够多的内容来提出问题所得到的:问题的答案,但不是我的问题如果你碰巧有办法避免这个隐式循环,那么现在就有一个问题了。
    <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");
    
    <script id="testTemplate" type="text/x-jquery-tmpl"> 
        <li>
            source[]: ${$data}
        </li>
    </script>