【问题标题】:How to use function wrapper in mustache.php?如何在 mustache.php 中使用函数包装器?
【发布时间】:2013-06-19 15:35:58
【问题描述】:

我开始在 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>

因为Mustache"{{skill_level}}" 传递给我的函数而不是值3

此外,如果我更改模板并在小胡子标签中放置退格键:

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

然后{{ skill_level }}被处理但没有发送到{{ #starts }},得到的渲染是

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

那么,有人知道我做错了什么吗?我应该如何编写模板以使其正常工作?欢迎任何建议或经验。谢谢。

【问题讨论】:

    标签: php mustache mustache.php


    【解决方案1】:

    我在wiki of the project找到了答案

    传递的文本是文字块,未渲染。

    但它提供了一个Mustache_LambdaHelper,可以用来渲染传递的文本。

    所以我必须将它添加到我的 lambda 函数中:

    $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;
    };
    

    这就是让它工作所需的一切。感谢所有读者!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2018-01-14
    相关资源
    最近更新 更多