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

此外,如果我更改模板,请在 mustache 标签中放置退格:
{{ #skill_level }}
  <span class="stars">
    {{ #stars }}
      {{ skill_level }}
    {{ /stars }}
  </span>
{{ /skill_level }}

然后 {{ skill_level }} 被处理但它没有发送到 {{ #starts }} ,获得的渲染是
<span class="stars">
    3
</span>

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

最佳答案

我在 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;
};

这就是让它工作所需的全部内容。感谢所有读者!

关于php - 如何在 mustache.php 中使用函数包装器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17195443/

10-13 02:16