2

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を知らないように、チェックボックスを埋めるための別のロジックも大丈夫です。レンダリングが完了した後のコールバック関数のように、または...

4

1 に答える 1

4

問題

JavaScript オブジェクトでは、キーは常に stringです。配列には数値Defaultが含まれていますが、( ) で渡す「針」は文字列であるため、常に , が返されます。i$.inArrayfalse

jsfiddle 0

ソリューション

これらのいずれかが機能します。

  1. 数値Valuesを含む文字列によって「インデックス付けされた」オブジェクトではなく、適切な配列を作成します。
    • jsfiddle 1 (ゼロベースのインデックス付けに注意してください!)
  2. 文字列Defaultsの配列を作成します。
  3. parseInt()に渡すときのValuesキー ( ) 。これは醜い修正だと思います。 i$.inArray()

ああ、スタック オーバーフローへようこそ!

于 2010-11-08T15:49:56.403 に答える