通过Handlebars自定义函数支持复杂逻辑表达式
发布于 9 年前 作者 ladykiller 10600 次浏览 最后一次编辑是 8 年前 来自 分享
/*
主要思想是使用eval执行想要的逻辑。以拼接字符的模式来进行逻辑判断理论上可以如同EL表达式一样处理页面上的大部分逻辑。
如:{{#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(' ')+".");
 	}
 });
3 回复

机智啊 用传递表达式做参数

可以使用,不过蛋疼的是符号必须加引号…

React 表示可以直接用 JavaScript 搞定所有表达式的事情

回到顶部