Handlebars条件 - 仅限布尔属性?

时间:2015-02-05 18:14:36

标签: ember.js handlebars.js

快速提问。是否可以在句柄条件中评估布尔属性以外的其他内容?

例如,这是有效的

//elsewhere...  myproperty = true
{{#if myproperty}}...

任何其他条件都可以吗?例如

//elsewhere...  myproperty = 3
{{#if myproperty<4}}...

3 个答案:

答案 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)}}