我正在尝试在模板中分配值,我的想法是做这样的事情:
{{#if author}}
{{className = 'classA'}} <- trying to implement this line.
{{else}}
{{className = 'classB'}}
{{/if}}
<div class={{className}}></div>
没有registerHelper可以这么做吗?
答案 0 :(得分:17)
我需要以与原始海报预期相同的方式解决此解决方案。因此我创建了一个辅助函数来为我做这个。
function setVariable(varName, varValue, options){
options.data.root[varName] = varValue;
};
包含在帮助程序中的选项中的是数据块,其中包含辅助变量的根。
我将变量放在根对象中,使用提供的值分配或覆盖。
html中的帮助器看起来很像这样。
{{setVariable "thisVar" "Contents Here"}}
<div>
{{thisVar}}
</div>
答案 1 :(得分:14)
您可以使用partial。
执行此操作部分:
<div class="{{classname}}">{{var1.author}}</div>
模板:
{{#if author}}
{{> mypartial var1=. classname="classA"}}
{{else}}
{{> mypartial var1=. classname="classB"}}
{{/if}}
在这个例子中,我已将当前范围作为var1传递。我不记得范围是否保持不变并且新变量刚刚添加到其中,或者您是否必须手动传递范围。
答案 2 :(得分: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}}
答案 3 :(得分:2)
{{#if author}}
<div class='{{ classA }}'></div>
{{else}}
<div class='{{ classB }}'></div>
{{/if}}
或尝试
<div class='{{#if author}} {{ classA }} {{else}} {{ classB }} {{/if}}'></div>
或者这个
创建一个脚本
<script>
$(function(){
var class;
{{#if author}}
class = {{ classA }}
{{else}}
class = {{ classB }}
{{/if}}
var $specials = $('.special');
$specials.removeClass('special');
$specials.addClass(class);
})
</script>