2

Mustache はパーシャルを許可し、たとえば Smarty と比較して比較的軽量であるため、優れていると思います。Mustache の使用に関する私の考えは、UI ライブラリを構成するパーシャルのセットを定義することです。これらのパーシャルでデータを渡し、ステロイドで html 要素を使用するように使用します。

パーシャルの例は、(視覚的に) リスト要素です。マークアップの観点から、その要素は 20 行の HTML ブロックとして定義されます。そのパーシャルをループで使用したい、または独立して使用したい場合があります。

上記のパーシャルを含むリストを作成したい場合は、次のようにします。

{{#my_list_elems}}
 ... Maybe some HTML code
 {{> my_partial
{{/my_list_elems}}

my_partial が次のようになっているとしましょう:

<div>
  <ul>
  {{#another_array}}
    <li>{{name}}</li>
  {{>#another_array}}
  </ul>
</div>

さて、これを理解しようとして数時間後、私のメインテンプレートは多かれ少なかれ次のようになります。

{{> head}}
{{> header}}
<div>Some static HTML</div>
... More code
{{#some_array}}
{{> my_partial}}
{{/some_array}}
{{> footer}}

問題: 何らかの理由で、これがうまくいきません。パーシャルを個別にレンダリングしてみましたが、動作します。でも配列?うーん。

また、私がそれを機能させた場合、変数をどのように処理するのかを理解するのに苦労しています。現時点では、次のようにレンダリングしています。

$template = $this->mustache->loadTemplate('template');
$partials['my_partial'] = $this->mustache->loadPartial('my_partial');
$data['my_partial_arr'] = $this->getPartialData();

echo $template->render($data, $partials);

PHP コードと部分的な例は一緒に動作することを意図していないことに注意してください。それらは単なる例です。

質問は、この機能はサポートされていますか? はいの場合、何が間違っていますか? 私の PHP 配列の形式が適切でない可能性がありますか? パーシャルの下位レベルで配列/ループを使用することもできますが、パーシャルを単独で使用する場合は、そのようなものは見苦しくなります (データを 1 つの要素配列にラップしてレンダリングします)。

4

1 に答える 1

3

したがって{{> head }}{{> header }}および{{> footer }}パーシャルは機能しますが、{{> my_partial }}機能しませんか?ファイルシステムのパーシャルローダーを使用していますか、それともパーシャルを文字列としてMustacheコンストラクターに渡していますか?

あなたを捕まえる可能性のある2つのこと:

  1. my_partial_arrMustacheは、配列( )を「反復可能」と見なさない場合があります。Mustache.php wikiには、もう少し詳しく説明しています。'emを実行array_values()して、セクションコンテキストとして使用されるのではなく、ループオーバーされるようにすることができます。

  2. 口ひげテンプレートrender()呼び出しにパーシャルを渡すことはできません。

    ほとんどの場合、2番目の引数としてパーシャルを渡しても問題は発生しません。これは、その関数が2番目の引数をとらないためです...とにかくloadPartial()、Mustacheインスタンスを介して必要なパーシャルをロードするだけです。

于 2012-10-04T06:00:09.093 に答える