首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mustache.php中使用函数包装器?

如何在mustache.php中使用函数包装器?
EN

Stack Overflow用户
提问于 2013-06-19 23:35:58
回答 1查看 3K关注 0票数 3

我开始在PHP上使用Mustache,但我不能让包装器函数像债务一样工作。

我有这个模板

代码语言:javascript
复制
{{#skill_level}}
  <span class="stars">
    {{#stars}}
      {{skill_level}} 
    {{/stars}}                        
  </span>
{{/skill_level}}

我有这些数据

代码语言:javascript
复制
$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);,并希望获得如下内容:

代码语言:javascript
复制
<span class="stars">
    +++..                        
</span>

但它不起作用。

我得到了

代码语言:javascript
复制
<span class="stars">
    .....                        
</span>

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

此外,如果我更改模板a,则在八字胡标签中放置退格:

代码语言:javascript
复制
{{ #skill_level }}
  <span class="stars">
    {{ #stars }}
      {{ skill_level }} 
    {{ /stars }}                        
  </span>
{{ /skill_level }}

然后处理{{ skill_level }},但不将其发送到{{ #starts }},获得的呈现是

代码语言:javascript
复制
<span class="stars">
    3                        
</span>

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-20 00:31:38

我已经在wiki of the project中找到了答案

传递的文本是文字块,未呈现。

但是它提供了一个Mustache_LambdaHelper,可以用来呈现传递的文本。

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

代码语言:javascript
复制
$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;
};

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17195443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档