artTemplate模板引擎不支持全局函数的解决方案

这几天在使用artTemplate模板引擎,但是发现在定义模板中不能使用全局函数,有点不可思议。经过研读相关文档与源码发现:如果想在模板中使用全局函数,需要在 template.helper 中重新定义一次,自我感觉有些设计缺陷。 

不过找到了修复这个缺陷的解决方案:

第一:修改源代码

// ============================
} else if (helpers[name]) {
	value = "$helpers." + name;
// 全局函数,这里只处理函数,不处理变量,因为有可能全局变量与data中的变量冲突,导致结果出错
} else if (typeof window[name] == "function") {
	// value = "window." + name;
	value = '';
} else {
	value = "$data." + name;
}
// 全局函数不需要重新声明
if (value) {
	headerCode += name + "=" + value + ",";
}
uniq[name] = true;
// ============================

第二:在data参数中定义要使用的函数,这个方法与上面提到的template.helper中重新定义是同一种思路

// ============================
var data = {},html;
function myfun(isAdmin,show){
	return (isAdmin ? "ok" : "no") + show;
}
data.myfun = window.myfun;
html = template('test', data);
document.getElementById('content').innerHTML = html;
// ============================

参考来自:
https://github.com/aui/artTemplate/
https://github.com/aui/artTemplate/wiki/syntax:native

同时也希望作者把这个问题得到更加完善的优化~~

12
Oct 2014
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments