3

私はPHPでMustacheを使い始めていますが、ラッパー関数を負債として機能させることができません。

私はこのテンプレートを持っています

{{#skill_level}}
  <span class="stars">
    {{#stars}}
      {{skill_level}} 
    {{/stars}}                        
  </span>
{{/skill_level}}

そして、私はこのデータを持っています

$data = new StdClass;
$data->skill_level = 3;
$data->stars = function($level) {
  $aux = "";
  $l = intVal($level);
  for ($i = 0; $i < $l; $i++) {
    $aux .= "+";
  }
  for ($i = $l; $i < 5; $i++) {
    $aux .= ".";
  }
  return $aux;
};

私はレンダリングm.render($tenplate, $data);し、次のようなものを取得したいと思います:

<span class="stars">
    +++..                        
</span>

しかし、うまくいきません。

私は得る

<span class="stars">
    .....                        
</span>

value の代わりに関数にMustache渡しているためです。"{{skill_level}}"3

さらに、テンプレートを変更すると、口ひげのラベルにバックスペースが挿入されます。

{{ #skill_level }}
  <span class="stars">
    {{ #stars }}
      {{ skill_level }} 
    {{ /stars }}                        
  </span>
{{ /skill_level }}

次に{{ skill_level }}が処理されますが、 に送信されず{{ #starts }}、取得されるレンダーは

<span class="stars">
    3                        
</span>

それで、誰かが私が間違っていることを知っていますか?テンプレートを機能させるには、どのように記述すればよいですか? アドバイスや体験談なんでも構いません。ありがとう。

4

1 に答える 1

6

プロジェクトのwikiで答えを見つけました

渡されたテキストは、レンダリングされていないリテラル ブロックです。

ただし、Mustache_LambdaHelper渡されたテキストをレンダリングするために使用できる を提供します。

したがって、これをラムダ関数に追加する必要があります。

$data->stars = function($label, Mustache_LambdaHelper $helper) {     
  $aux = "";
  $level = $helper->render($label);
  $l = intVal($level);
  for ($i = 0; $i < $l; $i++) {
    $aux .= "+";
  }
  for ($i = $l; $i < 5; $i++) {
    $aux .= ".";
  }
  return $aux;
};

そして、それを機能させるために必要なのはそれだけです。すべての読者に感謝します!

于 2013-06-19T16:31:37.797 に答える