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