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
同时也希望作者把这个问题得到更加完善的优化~~
