HandlebarsJS这个自定义helper如何改进?

cjwj
  • 628

使用:{{#expression a '==' b '&&' c '>' 0}}

var hbs = require('handlebars');
hbs.registerHelper('expression', function() {
    var exps = [];
     try{
         //最后一个参数作为展示内容,也就是平时的options。不作为逻辑表达式部分
         var arg_len = arguments.length;
        var len = arg_len-1;
        for(var j = 0;j<len;j++){
            exps.push(arguments[j]);
        }
        var result = eval(exps.join(' '));
        if (result) {
          return arguments[len].fn(this);
        } else {
          return arguments[len].inverse(this);
        }
     }catch(e){
         throw new Error('Handlerbars Helper "expression" can not deal with wrong expression:'+exps.join(' ')+".");
     }
 });
 

存在问题:不能做string类型的比较

data = {
    name : 'rose',
    age : 20
}

比如 {{#expression this.name '==' 'rose' '&&' this.age '==' 20}}

就会出现报错:

// eval(exps.join(' '))
eval(rose == rose && 20 == 20)
// 错误
'Handlerbars Helper "expression" can not deal with wrong expression:rose == rose && 20 == 20.
回复
阅读 2k
1 个回答

错误都不完整啊,在网上找个比较字符串的方法。粘贴到你的help方法里。改成你要比较的。返回true或者false。有个问题就是你要使用你这个help的话。一定要在使用的上一层引用一下。比如help叫addone。上一层div。就需要div test=“addone”之后在使用才能成功

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏