1

ネストされたテンプレートから親データにアクセスしようとしています。

このhttps://github.com/BorisMoore/jsrender/issues/34によると、私は似たようなことをしようとしていますが、エラーが発生しています: data.parent is undefined.

私の「マスター」テンプレートには、宣言があります

{{for Rooms  tmpl="#RoomTmpl" layout=true /}}

そして#RoomTmplで

 <script id="RoomTmpl" type="text/x-jsrender">
     {{:parent.data.Room1Label}}
     {{for #data}}
         {{:RoomName}}
     {{/for}}
 </script>

さまざまな組み合わせを試しましたが、常にエラーが発生します

 {{:parent.parent.data.Room1Label}}
 {{:#data.parent.parent.data.Room1Label}}
 {{:#data.parent.data.Room1Label}}
 {{:#data.parent.Room1Label}}

誰もこれを行う方法を知っていますか?

--ソリューション--

正しい構文は

#parent.parent.data.Room1Label
4

1 に答える 1

7

ビューをステップ アップして、親ビューからデータを取得します。ビューはテンプレートをレンダリングした結果であるため、{{for...}}...{{/for}} や {{if...}}...{{/ などのネストされたブロック タグif}} は子ビューを追加します。配列を「for」タグ {{for myArray}} に渡すと、データ配列が反復処理され、データ プロパティが配列である 1 つの子ビューが生成され、そのビューには子ビューのコレクションが含まれます。レンダリングされたアイテムごとに。

したがって、#view はビュー、#view.parent は親ビュー、#view.parent.data は親ビューのデータなどを認識する必要があります。#foo は #view.foo の略なので、#data はデータです。 、 #parent 親ビューなど。

唯一の問題は、親の数を正しく数えることです。{ ... properties ..., test: function() {debugger;} } というメソッドをデータに追加することで、何が起こっているのかをデバッグできます。次に、そのデータ項目のテンプレートの任意の場所に {{:test()}} を追加し、コンパイルされたテンプレートにステップインします。ビュー、その親などを見てください。

別のトリック。任意のブロック タグにテンプレート変数を設定すると、ネストされた任意のテンプレートからアクセスできます。だからあなたの例では、あなたは置くことができます

{{部屋の場合 tmpl="#RoomTmpl" ~label=Room1Label layout=true /}}

次に、ネストされたテンプレートから次のようにアクセスします。

{{:~ラベル}}

そうすれば、親ビューをステップアップすることを心配する必要がなくなります。

于 2012-05-04T16:37:36.857 に答える