快速提问。是否可以在句柄条件中评估布尔属性以外的其他内容?
例如,这是有效的
//elsewhere... myproperty = true
{{#if myproperty}}...
任何其他条件都可以吗?例如
//elsewhere... myproperty = 3
{{#if myproperty<4}}...
答案 0 :(得分:3)
如果没有助手,则无法if
评估条件。但是,您可以帮助它:
Handlebars.registerHelper('iff', function(left, condi, right, options) {
function ret(bool) {
if (bool) {
return options.fn(this);
} else {
return options.inverse(this);
}
}
switch (condi) {
case "==":
ret(left == right);
case "!=":
ret(left != right);
case ">":
//etc, etc, you get the idea
default:
return options.inverse(this);
}
});
用法:
{{#iff myproperty "<" 4}}
Myproperty is less than 4
{{else}}
Myproperty is greater than or equal to 4
{{/iff}}
- 编辑 -
尚未尝试过,但它看起来合情合理。求 问题为什么Handlebars不支持更复杂的条件 本地...
将逻辑与模板(视图)分开是一种很好的做法,因为它可以使您的代码更易于维护。基本上,它遵循separation of concerns原则。
就个人而言,我认为拥有一个条件if
也是有用的,因为在模板中肯定存在一次性if
语句,同时保持逻辑和视图分离。但是,默认情况下不包括它,它在一定程度上保护了用户自己,所以你最终不会看到20多个嵌套的if语句。
答案 1 :(得分:1)
您无法在模板中执行{{#if myproperty<4}}
。
有关在这种情况下该怎么做的示例,请参阅以下问题
How do I make a conditional helper with ember-cli and handlebars 2.0.0?
答案 2 :(得分:0)
最佳解决方案是使用ember-truth-helpers
因此,在您的情况下,您将使用{{if (lt myproperty 4)}}