2011-01-25 12 views
1

jqueryテンプレートを使用して、リストを作成します。私は、その結果、多くの<li />要素を持つ1つの親​​要素をしたい:Jqueryテンプレート:1つの親コンテナ、多くの子ですか?

<ul> 
    <li>One</li> 
    <li>Two</li> 
</ul> 

私のデータは次のようになります。

var data = 
[ 
    { val: 'One' }, 
    { val: 'Two' } 
] 

現在、子供<li />テンプレートは次のようになります。

<script id="child-tmpl" type="text/x-jquery-tmpl"> 
    <li> 
     ${val} 
    </li> 
</script> 

結果を得るには、私は現在これをやっています:

$('<ul></ul>').append($("#answer-tmpl").tmpl(data)); 

しかし、これはJqueryテンプレートの精神を半分しか受け入れていません。私は私のマークアップの文字列版を(上記のように)したくありません。

代わりに、誰かが親の内容を知っていますか?​​Jquery Templateの外観は?

答えて

4

代わりのtmplに配列を与え、それをフィールドとして配列を持つオブジェクト与える:

$("#answer-tmpl").tmpl({ data: data }); 

を次にあなたがこのようなあなたのテンプレートを変更することができます。

<script id="answer-tmpl" type="text/x-jquery-tmpl"> 
    <ul> 
    {{each data}} 
    <li> 
     ${val} 
    </li> 
    {{/each}} 
    </ul> 
</script> 

あなたが見ることができます作業例:http://jsfiddle.net/YNm3n/

+0

私の元の例は少し壊れていました。 '{{'と 'each'の間にスペースを入れることはできず、' each'はその前に '/'が必要です。 – bdukes

+0

すばらしい。私はそれを見て分がかかりましたが、これは私の元の着信データフォーマットをそのままに保つ素晴らしい、単純なソリューションです。 – jaketrent

1
var data = ['a', 'b', 'c']; 

var list = $('<ul/>'); 
$.each(data, function(idx, val) { 
    $('<li/>').html(val).appendTo(list); 
}); 
$('body').append(list); 

これは文字列表現を含まないジョブです。しかし、あなたの質問のコードはです。より効率的ながあります。すべてのアイテムに対してDOM操作をする必要がないからです。

http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctlyのDOM挿入に関するパフォーマンスの問題については、読んでおくことをお勧めします。

編集:他の回答を見ると、質問が間違っているようです。とにかく私はこの回答を残しておきますので、人々はその理由をコメントに含めて見ることができます。

+0

thiefmaster - 私はあなたの真実を賞賛します。そんなに、すぐに削除しないために+1! :-) –

2

jt - この素晴らしい例は、デイブ・ウォーズのエンコシアで、素晴らしいコンパクト・コンポジションを活用することができます。 jqueryテンプレート。以上にmoseyを取る:私はそれが事のこのタイプに設定より規約のパスにあなたを得るだろうと思います

http://encosia.com/2010/12/02/jquery-templates-composite-rendering-and-remote-loading/

、それは私がやりました。

+0

ジム、これらは素晴らしい記事です。ありがとう! – jaketrent

+0

jt - daveさんはいつも沸騰に関して素敵な記事をいくつか持っています。定期的に確認してください... –

関連する問題