jQuery模板中的Javascript函数无法正常工作

时间:2010-11-08 15:07:31

标签: jquery-plugins jquery-templates

我正在尝试使用jQuery.tmpl构建一个复选框列表 它会列出一个项目数组,附近有一个复选框,我想以参数方式检查其中一些复选框......

模板代码为:

<ul>
{{each(i,val) Values}}
    <li>
        <input type="checkbox" {{if $.inArray(i, Default) != -1}} checked="checked"{{/if}}>
        <em>${val}</em>
    </li>
{{/each}}
</ul>

和模板定义:

<script type="text/javascript">
    $(document).ready(function() {
        $('#tpl_selector').tmpl({
            Default: [1,2],
            Values: {
                1: 'Item 1',
                2: 'Item 2',
                3: 'Item 3'
            }
        }).appendTo('#area');

    });
</script>

因此,在这种情况下应检查第1项和第2项。创建列表没有问题,但{{if $.inArray(i, Default) != -1}} checked="checked"{{/if}}部分无效。

但是,当我用数字替换'i'时,它可以工作: {{if $.inArray(1, Default) != -1}} checked="checked"{{/if}}

我根本没有任何意义......你有什么建议吗?

填充复选框的另一个逻辑也可以,就像我不知道smt。像渲染完成后的回调函数,或者... ...

1 个答案:

答案 0 :(得分:4)

问题

在JavaScript对象中,键始终为字符串。您的Default数组包含数字,但您传入的“针头”(i)是字符串,因此{{1} }将始终返回$.inArray,。

jsfiddle 0

解决方案

其中任何一个都有效:

  1. 使false成为正确的数组,而不是由包含数字的字符串“索引”的对象。
  2. 使Values成为一个字符串数组。
  3. Defaults密钥(parseInt())传递给Values时,
  4. i。我认为这是一个丑陋的修复。

  5. 哦,欢迎来到Stack Overflow!