我想借助HandlebarsJs中的Register Helper函数实现默认值的自定义开关案例。
示例:
HTML:
<div>
{{#switch value}}
{{#case 'a'}} A {{/case}}
{{#case 'b'}} B {{/case}}
{{#default 'C'}} {{/default}}
{{/switch}}
</div>
JS: (Register Helper函数的工作方式应类似于下面的sudo代码)
switch(val) {
case 1:
return 'A';
break;
case 2:
return 'B';
break;
default:
return 'C';
}
答案 0 :(得分:2)
请仔细阅读以下示例,这将有助于逐步了解如何添加具有默认值的开关盒并破坏handlebarsjs。
使用链接http://tryhandlebarsjs.com/测试代码。 (给{} 上下文)
车把模板:
<div>
{{#switch 'a'}}
{{#case 'a'}} A {{/case}}
{{#case 'b'}} B {{/case}}
{{/switch}}
</div>
注册助手功能:
Handlebars.registerHelper('switch', function(value, options) {
this.switch_value = value;
return options.fn(this);
});
Handlebars.registerHelper('case', function(value, options) {
if (value == this.switch_value) {
return options.fn(this);
}
});
================================================ =========================
车把模板:
<div>
{{#switch 'a'}}
{{#case 'a'}} A {{/case}}
{{#case 'b'}} B {{/case}}
{{#default '188'}} {{/default}}
{{/switch}}
</div>
注册助手功能:
Handlebars.registerHelper('switch', function(value, options) {
this.switch_value = value;
return options.fn(this);
});
Handlebars.registerHelper('case', function(value, options) {
if (value == this.switch_value) {
return options.fn(this);
}
});
Handlebars.registerHelper('default', function(value, options) {
return true; ///We can add condition if needs
});
================================================ =========================
车把模板:
<div>
{{#switch 'a'}}
{{#case 'a'}} A {{/case}}
{{#case 'b'}} B {{/case}}
{{#default '188'}} {{/default}}
{{/switch}}
</div>
注册助手功能:
Handlebars.registerHelper('switch', function(value, options) {
this.switch_value = value;
this.switch_break = false;
return options.fn(this);
});
Handlebars.registerHelper('case', function(value, options) {
if (value == this.switch_value) {
this.switch_break = true;
return options.fn(this);
}
});
Handlebars.registerHelper('default', function(value, options) {
if (this.switch_break == false) {
return value;
}
});
答案 1 :(得分:0)
只需要将键转换为值。
module.exports = function(input, cases, values) {
const caseArray = cases.split(',')
const valueArray = values.split(',')
const defaultValue = caseArray.length < valueArray.length ? valueArray[valueArray.length-1] : "";
return caseArray.indexOf(input) > -1? valueArray[caseArray.indexOf(input)] : defaultValue
};
{{switch "Y" "Y,N,D", "YES,NO,DELETED,-"}} // YES
{{switch "Hi" "Y,N,D", "YES,NO,DELETED,-"}} // -
答案 2 :(得分:0)
如果您只需要一个 if
-else if
-else
结构,请考虑使用内置的 if
/else
助手(参见 { {3}} 在“链接”条件上)并仅在您自己的帮助程序中定义比较操作。
Handlebars.registerHelper('isEqual', (value1, value2, options) => {
return value1 === value2;
});
<div>
{{#if (isEqual value 'a')}}
A
{{else if (isEqual value 'b')}}
B
{{else}}
C
{{/if}}
</div>
最初回答 Helpers: Conditionals。