|
AceTemplate
世界上最好用的纯前端模板【没有之一】 概述随着Ajax技术的普及,纯前端模板的使用频率越来越高。我们需要一个易学、易用、高性能的模板系统来处理日益繁杂的需求变化。 前端模板处理,有90%以上的情况都是在处理html相关字符串,针对这一特性我们设计了一种只包含html和js两种语法的模板系统AceTemplate。 对于前端开发者,html和js是无需额外的学习成本。 特点
语法以行为单位,分为两种html行和js行,自由穿插判断是否为html行的规则
示例:
示例:>、src="1.gif" /> 示例:hello world 示例:a="12"、a='ab' b="cd" 示例:
html行负责输出内容两种表达式输出;#{表达式}和!#{表达式} #{表达式} 采用html字符串编码输出,默认规避xss漏洞 !#{表达式} 采用原文字符串编码输出 js行负责逻辑处理style、script标签和内容原样输出方法format格式化输出 /**
* 格式化输出
* @param {String|Element} id 模板ID或是模板本身(非标识符将识别为模板本身)
* @param {Object} data 格式化的数据
* @param {Object} helper 附加数据(默认为模板对象)
*/
AceTemplate.format = function(id, data, helper)register注册模板 /**
* 注册模板,如果没有参数则是注册所有script标签模板
* @param {String} id 模板ID
* @param {Element|String} target 模板对象或者是模板字符串,如果没有则默认获取id对应的DOM对象
*/
AceTemplate.register = function(id, target)unregister注销模板 /**
* 注销模板
* @param {String} id 模板ID
*/
AceTemplate.unregister = function(id)例子输入输出用例http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/case.html 调试:http://jsfiddle.net/zswang/hA7Jd/
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="../../scripts/ace-template.js"></script>
<title>ace template examples</title>
<style type="text/css">
#log{
width: 600px;
height: 400px;
}
</style>
</head>
<body>
<textarea id="log"></textarea>
<script id="t1" type="text/template">
if (this["title"])
{
#{title}
}
else
{
<b>无</b>
}
</script>
<script>
(function() {
var log = document.getElementById("log");
var list = [
{
input: ["#{this}", "<b>b</b>"],
output: "<b>b</b>"
},
{
input: ["!#{this}", "<b>b</b>"],
output: "<b>b</b>"
},
{
input: ["#{title}#{size}", {
title: "t"
}],
output: "t"
},
{
input: ["#{title}#{size + 2}", {
title: "t"
}],
error: true
},
{
input: ["#{1 + 2 + 3 + 4}"],
output: "10"
},
{
input: ["t1"],
output: "\t\t\t\t<b>无</b>\n"
}
];
var message = [];
for (var i = 0; i < list.length; i++) {
var item = list[i];
try {
var output = AceTemplate.format(item.input[0], item.input[1]);
if (output == item.output) {
message.push("√" + i + "输出结果符合预期。");
} else {
message.push("×" + i + "输出结果不符合预期。-- " + output);
}
} catch(ex) {
if (item.error) {
message.push("√" + i + "异常符合预期。");
} else {
message.push("×" + i + "异常不符合预期。-- " + ex.message);
}
}
}
log.value = message.join("\n");
})();
</script>
</body>
</html>示例普通循环用法http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/base1.html 调试:http://jsfiddle.net/zswang/S3rwL/
示例和jquery混用http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/base2.html 调试:http://jsfiddle.net/zswang/dehd6/
示例默认防止XSS漏洞http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/security1.html 调试:http://jsfiddle.net/zswang/aXKQA/
示例嵌套模板http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/nesting1.html 调试:http://jsfiddle.net/zswang/YJWZA/
示例递归模板http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/recursion1.html 调试:http://jsfiddle.net/zswang/JcwHg/
示例关键词http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/keyword.html 调试:http://jsfiddle.net/zswang/fvLX3/
作者微博 |