Функция Javascript внутри шаблона JQuery не работает правильно - PullRequest
2 голосов
/ 08 ноября 2010

Я пытаюсь составить список флажков с помощью 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 Ответ

4 голосов
/ 08 ноября 2010

проблема

В объектах JavaScript ключ всегда является строкой . Ваш массив Default содержит чисел , но передаваемая вами "игла" (i) - строка , поэтому $.inArray всегда будет возвращать false, .

jsfiddle 0

Решения

Любой из них будет работать:

  1. Сделать Values правильным массивом, а не объектом, «проиндексированным» строками, содержащими числа.
    • jsfiddle 1 (Обратите внимание, индексация начинается с нуля!)
  2. Сделать Defaults массивом строк.
  3. parseInt() ключ Values (i) при передаче его на $.inArray(). Я думаю, что это уродливое решение.

О, и добро пожаловать в переполнение стека!

...