artTemplate使用
bower install artTemplate --save
https://github.com/aui/artTemplate
快速上手
模板定义:
<div id="content"></div>
<script
id="test" type="text/html">
{{if isAdmin}}
<h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul>
{{/if}}
</script>
function(item,index)
数据绑定
<script src="../dist/template.js"></script>
<script>
var data = {
title: '基本例子',
isAdmin: true,
list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;
</script>
语法说明
1. 版本
有两个版本的模板语法可以选择
简洁语法
推荐使用,语法简单实用,利于读写,使用template.js。
{{if admin}}
{{include 'admin_content'}}
{{each list}}
<div>{{$index}}. {{$value.user}}</div>
{{/each}}
{{/if}}
原生语法
使用template-navative.js
<%if (admin){%>
<%include('admin_content')%>
<%for (var i=0;i<list.length;i++) {%>
<div><%=i%>. <%=list[i].user%></div>
<%}%>
<%}%>
2. 显示属性
<h3> <span class=”{{title}}”></span></h3>
#代表属性不转义,会按照原始串输出,如果是标签会被解析成dom
<h3>{{#title}}</h3>
3. 判断
{{if isAdmin}}
<h1>{{title}}</h1>
{{/if}}
{{if isAdmin}}
<h1>{{title}}</h1>
{{else}}
<div>{{message}}</div>
{{/if}}
{{if type==1}}
<h1>{{title}}</h1>
{{/if}}
4. 循环
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
{{each list}}
<li>索引 {{$index}} :{{$value}}</li>
{{include ‘test’ }}
{{/each}}
{{each data}}
<tr>
<td >{{$value.agent_name}}</td>
<td >{{$value.agent_id}}</td>
<td >{{$value.type}}</td>
<td >
{{each $value.items}}
<span>{{$value}}</span>
{{/each}}
<td>
<tr>
{{/each}}
5. 引入
引入id为list的模板
{{include 'list'}}
模板定义
6. 使用type=“text/html”的script标签
<script id="list" type="text/html">
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul>
</script>
7. 使用js的变量存储模板
var source = '<ul>'
+ '{{each list as value i}}'
+ '<li>索引 {{i + 1}} :{{value}}</li>'
+ '{{/each}}'
+ '</ul>';
var source = '\
<ul>\
{{each list as value i}}\
<li>索引 {{i + 1}} :{{value}}</li>\
{{/each}}\
</ul>\
';
方法
注意:各个方法传递的数据必须是具有属性的对象,不能是数组
{data:{}} 或者{data:[]}
8. template(id, data)
根据 id 渲染模板。内部会根据document.getElementById(id)查找模板。
如果没有 data 参数,那么将返回一渲染函数。
<ul id="list"></ul>
<script id="list-temp" type="text/html">
{{each list}}
<li>
<img src="{{$value.img}}" alt="">
<h3>{{$value.title}}</h3>
<p>{{$value.time}}</p>
</li>
{{/each}}
</script>
<script>
var data={
list:[
{img:'1.jpg',title:'javascript',time:'2014-11-01'},
{img:'2.jpg',title:'css3',time:'2015-11-01'},
{img:'3.jpg',title:'html5',time:'2016-11-01'}
]
}
document.querySelector('#list').innerHTML=template('list-temp',data);
</script>
9. template.compile(source)
template.compile()接收模板字符串,会返回一个函数,使用该函数传入数据构建html
<ul id="list"></ul>
<script>
var source='\
{{each list}}\
<li>\
<img src="{{$value.img}}" alt="">\
<h3>{{$value.title}}</h3>\
<p>{{$value.time}}</p>\
</li>\
{{/each}}\
';
var data={
list:[
{img:'1.jpg',title:'javascript',time:'2014-11-01'},
{img:'2.jpg',title:'css3',time:'2015-11-01'},
{img:'3.jpg',title:'html5',time:'2016-11-01'}
]
}
var render = template.compile(source);//返回一个函数
var html = render(data);
//var html= template.compile(source)(data);
document.querySelector('#list').innerHTML=html;
</script>
10. template.helper(name, callback)
添加辅助方法。
<ul id="list"></ul>
<script id="list-temp" type="text/html">
{{each list}}
<li>
<p>{{$value.state | state}}</p>
<h3>{{$value.title}}</h3>
<p>{{$value.remark | subStr:15}}</p>
</li>
{{/each}}
</script>
<script>
template.helper('state',function (value) {
if(value==0){
return '禁用'
}else{
return '启用'
}
})
template.helper('subStr',function (value,num) {
return value.substr(0,num)+'...';
})
</script>
<script>
var data={
list:[
{state:'1',title:'javascript',remark:'artTemplate 是新一代 javascript 模板引擎,它在 v8 中的渲染效率可接近 javascript 性能极限'},
{state:'1',title:'css3',remark:'在 chrome 下渲染效率测试中分别是知名引擎 Mustache 与 micro tmpl 的 25 、 32 倍(性能测试)'},
{state:'0',title:'html5',remark:'另外,artTemplate 的模板还支持使用自动化工具预编译,这一切都在 2KB(Gzip) 中实现'}
]
}
document.querySelector('#list').innerHTML=template('list-temp',data);
</script>
handerbar
https://github.com/wycats/handlebars.js/
这种方式的的缺点是,模板通过字符串拼接,不好维护,适合简单模板。
artTemplate使用的更多相关文章
- 性能卓越的js模板引擎--artTemplate
artTemplate能够将数据与View视图的分离,充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现. 在 chrome 下渲染效率测试中分别是知名引擎 Mu ...
- JavaScript模板引擎artTemplate.js——结语
再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...
- 【JavaScript】ArtTemplate个人的使用体验。
据说ArtTemplate是腾讯的,感觉这东西真不错,使用方便,用起来很简单,哈哈.腾讯也不完全只是坑爹啊. ArtTemplate 使用是,正常引入js,这个自然不用说.这东西啥时候使用呢?我觉得这 ...
- JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用
最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...
- artTemplate模板引擎学习实战
在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javasc ...
- JavaScript模板引擎artTemplate.js——两种方法实现性别的判定
template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...
- JavaScript模板引擎artTemplate.js——如何引入模板引擎?
artTeamplate.js在github上的地址:artTemplate性能卓越的js模板引擎 引入模板引擎,就是引入外部javascript啦,并且artTemplate.js不依赖其他第三方库 ...
- JavaScript模板引擎artTemplate.js——为什么使用模板引擎?
作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发.其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的. 1.vo+e ...
- artTemplate 自动化编译之tmod
一.背景 前端小白的成长历程,一般都会经历html模板的一些问题,jquery template/artTemplate/yayaTemplate等常见的模板使用,这里就不作介绍了. 先谈谈我们为什么 ...
- artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.
artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.
随机推荐
- linux/centOS 下安装 ngnix
Nginx 是一款轻量级的 Web 服务器/反向代理服务器,比较流行,建议在 Linux 下安装运行. Nginx 需要的依赖 它们包括:gcc,openssl,zlib,pcre(可通过rpm -q ...
- woff/woff2字体404找不到
每次控制台都报这个错,很纳闷,服务器上明明放了字体文件,怎么找不到呢 今天突然想起来,IIS的MIME类型要配置一下 之前部署网站,一个链接下载app的时候,IIS就不识别apk格式的文件,尽管服务器 ...
- Java框架spring 学习笔记(十):bean管理(注解和配置文件混合使用)
配置文件和注解混合使用 创建对象操作使用配置文件方式实现 注入属性的操作使用注解方式实现 编写BookDao.java和OrderDao.java文件 BookDao.java package com ...
- ADDED、ADDED_TO_STAGE、REMOVED、REMOVED_FROM_STAGE这几个事件的区别
var _container:Sprite = new Sprite(); _container.addEventListener(Event.ADDED,onAdded); _container.a ...
- dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
该问题是由于电脑环境变量配置错误所导致.最初在网上查找的方法,是在系统环境变量path中添加以下语句: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\ ...
- Selenium+TestNG+Maven+Jenkins+SVN(转载)
转载自:https://blog.csdn.net/u014202301/article/details/72354069 一. 创建Maven项目,下载Selenium和TestNG的依赖(依赖可以 ...
- zigbee_蓝牙_wifi的比较与区别分析
现在无线通读热了起来.三个最大的Wifi.ZigBee.蓝牙它们三个始终困惑着我.那么它们三个有什么区别呢? Zigbee 和蓝牙都是一项无线通信技术.ZigBee的传输距离视发射功率而定,有几百到几 ...
- redis学习笔记01 — 基本介绍、安装配置及常用命令
redis--NoSQL的一种 为了解决高并发.高可用.高扩展.大数据存储等一系列问题而产生的数据库解决方案,就是NoSQL NoSQL,非关系型数据库,全名:Not Only Sql,它不能代替关系 ...
- 浏览器标签栏logo添加
在<head > 中引入link,如下: <head> <link rel="icon" type="image/icon" hr ...
- Tigase-01 使用spark或spi登录Tigase服务器
喜欢研究IM技术的同学们,欢迎加入群 310790965 一起来学习,有什么问题可以一起讨论. 本源码是基于tigase v7.1.0来分析的,群里文件中会上传一个完整能跑的源代码压缩包,网上tiga ...