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

发布于 2022-09-04 01:52:52 字数 1132 浏览 35 评论 0

使用:{{#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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心舞飞扬 2022-09-11 01:52:52

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文