0

「テスト」オブジェクトの配列を表示する jTemplate を作成しました。配列は通常のインデックス付き配列です。テンプレートは非常に基本的なもので、 a を使用し{#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内の連想配列をどのように操作するか教えてもらえますか?

4

1 に答える 1

1

あなたの問題は、あなたの配列がそれが巨大であると考えているということです:

_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
于 2011-09-20T15:33:46.453 に答える