我正在尝试在模板内分配值,想法是做这样的事情:
{{#if author}}
{{className = 'classA'}} <- trying to implement this line.
{{else}}
{{className = 'classB'}}
{{/if}}
<div class={{className}}></div>
不使用registerHelper是否可以做到这一点?
我需要以与原始发帖人预期相同的方式解决此解决方案。因此,我创建了一个辅助函数来为我执行此操作。
function setVariable(varName, varValue, options){
options.data.root[varName] = varValue;
};
包含在助手选项中的是数据块,以及助手变量的根。
我将变量放在根对象中,使用提供的值进行分配或覆盖。
html 中的助手看起来很像这样。
{{setVariable "thisVar" "Contents Here"}}
<div>
{{thisVar}}
</div>
您可以使用 partial 来完成此操作。
部分:
<div class="{{classname}}">{{var1.author}}</div>
模板:
{{#if author}}
{{> mypartial var1=. classname="classA"}}
{{else}}
{{> mypartial var1=. classname="classB"}}
{{/if}}
在此示例中,我将当前作用域作为 var1 传递。我不记得范围是否保持不变并且新变量只是添加到其中,或者是否必须手动传递范围。
来自上述有用答案的小更新。在 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}}
{{#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>