具有辅助函数的Handlebar逻辑运算

时间:2014-06-07 19:21:18

标签: backbone.js handlebars.js

我使用车把为我的骨干应用程序创建模板,并且我使用了车把ifCond帮助程序(源代码已经可用)。使用这个辅助函数,我可以轻松地检查两个值,例如

{{#ifCond val1 val2 operator="!="}}
{{/ifCond}}

同样,我可以使用" ==",">","<"运算符。

但现在我想使用&&,|| if条件块中的运算符,例如

{{#ifCond val1 && val2}}
{{/ifCond}}

我想在if块中使用数学运算符,例如

{{#ifCond val1+1 val2 operator=">"}}
{{/ifCond}}

请告诉我这是最好的方法。

1 个答案:

答案 0 :(得分:4)

您可以使用Javascript的“eval”方法在您的帮助函数中执行此操作。

HandleBars.registerHelper("evalExpression", function(){
        var me = this, result, 
        args = Array.prototype.slice.call(arguments),
        options =  args.pop(),
        params = args,
        expression = options.hash.expression;
        expression = expression.replace(/\#([0-9]+)/g, function(match, val){
            return params[val];
        });

        result = eval(expression);

        if(options.hash.returnBool == "true"){
            if(result){
                return options.fn(this)
            }else{
                return options.inverse(this);
            }
        }else{
            return result;
        }

    })

然后在车把模板中使用: -

{{#evalExpression val1 val2 expression="#0 && #1" returnBool="true"}}

{{else}}

{{/evalExpression }}

并且:

{{#evalExpression val1 1 val2 expression="(#0+#1) > #2" returnBool="true"}}

{{else}}

{{/evalExpression }}