Передача ассоциативного массива в jTemplates в качестве параметра - PullRequest
0 голосов
/ 20 сентября 2011

Я создал jTemplate для отображения массива «тестовых» объектов.Массив является обычным индексированным массивом.Шаблон очень прост, просто использует {#foreach} для перебора элементов в массиве и отображает их в небольшой таблице.Этот шаблон выполняет работу, и я получаю ожидаемый результат.

    // Setup the JTemplate. 
    $('#tests_div').setTemplate($('#tests_template').html());

    try {

        // Process the JTemplate to display all currently selected tests.
        $('#tests_div').processTemplate(_selectedTests);
    }
    catch (e) {
        alert('Error with processing template: ' + e.Description);
    }


    <script type="text/html" id="tests_template">
       {#foreach $T as tests}
          <table>
             <tr>
                <td>Index: {$T.tests.index}</td>
                <td>Name: {$T.tests.firstname} {$T.tests.lastname}</td>
                <td>Score: {$T.tests.score} </td>
             </tr>
          </table>
      {#/for}
    </script>

Что я хотел бы сделать, так это изменить свой массив на ассоциативный массив и сохранить в нем мои объекты, используя индекс теста.Это облегчает работу, когда мне нужно выполнить некоторые манипуляции с тестами позже.

var a = new Test;
a.index = 12345678;
_selectedTests[a.index] = a;

Однако, когда я передаю массив в шаблон, я получаю сообщение об ошибке сценария, которое вызывает замедление работы браузера и спрашивает, не хочу ли я его остановить.Похоже, это в какой-то бесконечной петле.Я не уверен, что шаблон правильно читает массив.Может кто-нибудь сказать мне, как я работаю с ассоциативным массивом внутри jTemplates?

1 Ответ

1 голос
/ 20 сентября 2011

Вы считаете, что ваш массив считает его огромным:

_selectedTests[12345678] = a; // creates an array of 12345678 elements!! length of 12345678

так что вы можете сделать это:

_selectedTests[a.index.toString()] = a; // creates an associative array with one key "12345678", length of 1
...