您不能使用自定义助手执行此操作,因为 Handlebars if-ish 助手只了解两个部分:“if”部分和“else”部分。不过你可以嵌套一些东西:
{{#if type.one}}
do something ... IF
{{else}}
{{#if type.two}}
do something ... ELSE IF
{{else}}
{{#if type.three}}
...
{{else}}
...
{{/if}}
{{/if}}
{{/if}}
这种事情会很快变得令人讨厌,所以你可能不想这样做。一种更好的方法(与 Handlebars 一样)是将逻辑推送到您的 JavaScript 中,以便 type.one、type.two、type.three、... 中的最多一个为真;那么你可以:
{{#if type.one}}
...
{{/if}}
{{#if type.two}}
...
{{/if}}
{{#if type.three}}
...
{{/if}}
如果您有很多 type 的选项,或者如果您的 {{#if}}s 中的正文很复杂,您可以切换到部分。但是,您必须添加一个自定义帮助程序才能基于模板变量构建部分名称;像这样:
Handlebars.registerHelper('show_type', function(type) {
var types = ['one', 'two', 'three'];
var partial;
for(var i = 0; i < types.length; ++i) {
if(!type[types[i]])
continue;
partial = '_partial_' + types[i];
break;
}
if(partial)
return Handlebars.partials[name](this);
else
return '';
});
然后,假设您的部分都已注册并一致命名,您可以说:
{{show_type type}}