我开始在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值传递给我的函数。
此外,如果我更改模板a,则在八字胡标签中放置退格:
{{ #skill_level }}
<span class="stars">
{{ #stars }}
{{ skill_level }}
{{ /stars }}
</span>
{{ /skill_level }}然后处理{{ skill_level }},但不将其发送到{{ #starts }},获得的呈现是
<span class="stars">
3
</span>有人知道我做错了什么吗?我应该如何编写模板以使其正常工作?欢迎任何建议或经验。谢谢。
发布于 2013-06-20 00:31:38
我已经在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;
};这就是让它工作所需要的一切。感谢所有的读者!
https://stackoverflow.com/questions/17195443
复制相似问题