Можно ли назначить значение параметра в шаблонах руля без использования помощников?
Я пытаюсь назначить значения внутри шаблона, идея состоит в том, чтобы сделать что-то вроде этого:
{{#if author}}
{{className = 'classA'}} <- trying to implement this line.
{{else}}
{{className = 'classB'}}
{{/if}}
<div class={{className}}></div>
Можно ли сделать это без registerHelper?
Ответы
Ответ 1
Вы можете сделать это с частичным.
частичный:
<div class="{{classname}}">{{var1.author}}</div>
шаблон:
{{#if author}}
{{> mypartial var1=. classname="classA"}}
{{else}}
{{> mypartial var1=. classname="classB"}}
{{/if}}
В этом примере я передал текущую область видимости как var1. Я не могу вспомнить, остается ли область действия той же самой, и новая переменная просто добавляется к ней, или если вы должны передать область действия вручную.
Ответ 2
Мне нужно, чтобы это решение решалось так же, как ожидалось исходный плакат. Поэтому я создал вспомогательную функцию, чтобы сделать это для меня.
function setVariable(varName, varValue, options){
options.data.root[varName] = varValue;
};
Внутри опций хелпера содержится блок данных с корнем хелперных переменных.
Я поместил свою переменную в корневой объект, назначив или перезаписав его с предоставленным значением.
Помощник в html выглядит так.
{{setVariable "thisVar" "Contents Here"}}
<div>
{{thisVar}}
</div>
Ответ 3
Небольшое обновление от полезного ответа выше. В Handlebars 4.x кажется, что мы должны получить переменные из @root.
handlebars.registerHelper('assign', function (varName, varValue, options) {
if (!options.data.root) {
options.data.root = {};
}
options.data.root[varName] = varValue;
});
А потом,
{{assign 'imageTag' 'drop-155'}}
{{@root.imageTag}}
Ответ 4
{{#if author}}
<div class='{{ classA }}'></div>
{{else}}
<div class='{{ classB }}'></div>
{{/if}}
или попробуйте
<div class='{{#if author}} {{ classA }} {{else}} {{ classB }} {{/if}}'></div>
или, может быть, это
создать script
<script>
$(function(){
var class;
{{#if author}}
class = {{ classA }}
{{else}}
class = {{ classB }}
{{/if}}
var $specials = $('.special');
$specials.removeClass('special');
$specials.addClass(class);
})
</script>