世界上最好用的纯前端模板(没有之一)
创始人
2024-08-02 10:20:42
0

随着Ajax技术的普及,纯前端模板的使用频率越来越高。我们需要一个易学、易用、高性能的模板系统来处理日益繁杂的需求变化。

前端模板处理,有90%以上的情况都是在处理html相关字符串,针对这一特性我们设计了一种只包含html和js两种语法的模板系统AceTemplate。

对于前端开发者,html和js是无需额外的学习成本。

特点

  1. 易学(只需html和js基础),易用(最少的输入)
  2. 智能(自动识别语法、标识符)
  3. 扩展便捷

语法

以行为单位,分为两种html行和js行,自由穿插

判断是否为html行的规则

◆ 特殊字符开头;

示例:

  1. 汉字、#{value}、
     

◆ Html标记结尾;

示例:

  1. >、src="1.gif" /> 

◆ 没有“双引号、单引号、分号、逗号,大小括号”,不是else等单行语句;

示例:

  1. hello world 

◆ Html属性;

示例:

  1. a="12"、a='ab' b="cd" 

◆ 样式表达式。

示例:

  1. div.focus{color: #fff;}、#btnAdd span{} 

html行负责输出内容

两种表达式输出;#{表达式}和!#{表达式}

#{表达式} 采用html字符串编码输出,默认规避xss漏洞

!#{表达式} 采用原文字符串编码输出

js行负责逻辑处理

方法

format

格式化输出

  1. /**  
  2.  * 格式化输出  
  3.  * @param {String|Element} id 模板ID或是模板本身(非标识符将识别为模板本身)  
  4.  * @param {Object} data 格式化的数据  
  5.  * @param {Object} helper 附加数据(默认为模板对象)  
  6.  */  
  7. AceTemplate.format = function(id, data, helper) 

register

注册模板

  1. /**  
  2.  * 注册模板,如果没有参数则是注册所有script标签模板  
  3.  * @param {String} id 模板ID  
  4.  * @param {Element|String} target 模板对象或者是模板字符串,如果没有则默认获取id对应的DOM对象  
  5.  */  
  6. AceTemplate.register = function(id, target) 

unregister

注销模板

  1. /**  
  2.  * 注销模板  
  3.  * @param {String} id 模板ID  
  4.  */  
  5. AceTemplate.unregister = function(id) 

例子

输入输出用例

http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/case.html

调试:http://jsfiddle.net/zswang/hA7Jd/

◆ 集中测试。

  1.  
  2.          
  3.                  
  4.                  
  5.                 ace template examples 
  6.                   
  7.                  
  8.                         #log{  
  9.                                 width: 600px;  
  10.                                 height: 400px;  
  11.                         }  
  12.                  
  13.          
  14.          
  15.                  
  16.                  
  17.                         if (this["title"])   
  18.                         {  
  19.                                 #{title}  
  20.                         }  
  21.                         else  
  22.                         {  
  23.                                  
  24.                         }  
  25.                  
  26.                   
  27.                  
  28.          
  29.  

示例普通循环用法

http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/base1.html

调试:http://jsfiddle.net/zswang/S3rwL/

◆ 模板中的this代表数据本身,即format的data参数;

◆ 逻辑部分用js,输出部分用html,#{表达式}为变量替换。

示例和jquery混用

http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/base2.html 调试:http://jsfiddle.net/zswang/dehd6/

◆ 逻辑部分和输出部分将编译成一个完整的js函数块。

示例默认防止XSS漏洞

http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/secuity1.html

调试:http://jsfiddle.net/zswang/aXKQA/

◆ 输出表达式默认采用html编码;

◆ 也可以使用!#{表达式}输出原文。

示例嵌套模板

http://ace-engine.googlecode.com/svn/trunk/examples/ace-template/nesting1.html

调试:http://jsfiddle.net/zswang/YJWZA/

◆ 模板中helper是一个附加参数,默认指AceTemplate本身;

◆ 采用不编码输出另一个模板渲染结果既实现嵌套。

示例递归模板

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/

使用html编码输出可以这样:AceTemplate.format("#{this}", text);

通过helper参数,加入keyword方法

作者微博

http://weibo.com/zswang http://weibo.com/zinkey

原文链接:http://code.google.com/p/ace-engine/wiki/AceTemplate

【编辑推荐】

  1. 44个惊人的超炫CSS3动画演示
  2. 97条架构师须知
  3. JavaScript诞生记:C语言和Self语言一夜情的产物
  4. HTML 5怎么就成了RIA“杀手”?
  5. 10款Firefox插件帮助Web开发者事半功倍

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...