2013-06-19 2 views
2

Я начинаю работать с Mustache на PHP, и мне не удается заставить функции обертки работать как долговые обязательства.Как использовать обертку функций в файле mustache.php?

У меня есть этот шаблон

{{#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> 

Так , кто-нибудь знает, что я делаю неправильно? Как мне написать шаблон, чтобы он работал? Любые советы или опыт приветствуются. Благодарю.

ответ

6

Я нашел ответ в wiki of the project

Текст передается буквальный блок, непревращаемый.

Но он предоставляет 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; 
}; 

И все это необходимо, чтобы сделать это работает. Спасибо всем читателям!

+0

Да. Это то, что нужно :) – bobthecow

+2

Я бы прокомментировал вашу лямбду примерно так: https://gist.github.com/bobthecow/19f09ebf4395ee9f87d9 – bobthecow

+0

Спасибо! Всегда учитесь в этом сообществе. –

Смежные вопросы