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

http://handlebarsjs.com/

https://github.com/wycats/handlebars.js/

这种方式的的缺点是,模板通过字符串拼接,不好维护,适合简单模板。

artTemplate使用的更多相关文章

  1. 性能卓越的js模板引擎--artTemplate

    artTemplate能够将数据与View视图的分离,充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现. 在 chrome 下渲染效率测试中分别是知名引擎 Mu ...

  2. JavaScript模板引擎artTemplate.js——结语

    再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...

  3. 【JavaScript】ArtTemplate个人的使用体验。

    据说ArtTemplate是腾讯的,感觉这东西真不错,使用方便,用起来很简单,哈哈.腾讯也不完全只是坑爹啊. ArtTemplate 使用是,正常引入js,这个自然不用说.这东西啥时候使用呢?我觉得这 ...

  4. JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用

    最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...

  5. artTemplate模板引擎学习实战

    在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javasc ...

  6. JavaScript模板引擎artTemplate.js——两种方法实现性别的判定

    template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...

  7. JavaScript模板引擎artTemplate.js——如何引入模板引擎?

    artTeamplate.js在github上的地址:artTemplate性能卓越的js模板引擎 引入模板引擎,就是引入外部javascript啦,并且artTemplate.js不依赖其他第三方库 ...

  8. JavaScript模板引擎artTemplate.js——为什么使用模板引擎?

    作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发.其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的. 1.vo+e ...

  9. artTemplate 自动化编译之tmod

    一.背景 前端小白的成长历程,一般都会经历html模板的一些问题,jquery template/artTemplate/yayaTemplate等常见的模板使用,这里就不作介绍了. 先谈谈我们为什么 ...

  10. artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.

    artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.

随机推荐

  1. 3G设置linux路由-iptables配置

    1.如何区分iptables的PREROUTING和POSTROUTING链 (引自http://jingyan.baidu.com/article/aa6a2c143d84470d4c19c4cf. ...

  2. Idea书签管理器的使用

    1. 添加书签 以光标所在的行,为落点, 方式一: F11 , 添加一个默认的书签 方式二:Crtl + Shift + 数字 , 添加一个带编号 的书签 2. 查看书签 方式一:Shift + F1 ...

  3. BackgroundWorker 组件 -- 进度条

    代码: BackgroundWorker bw = new BackgroundWorker(); public MainWindow() { InitializeComponent(); bw.Wo ...

  4. iframe登录超时跳转登录页面

    1.可以在登录页面加jQuery验证 $(function () { //判断一下当前是不是做顶层,如果不是,则做一下顶层页面重定向 if (window != top) { top.location ...

  5. jquery全选的选中和取消选中

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. java虚拟机和内存优化总结

    前一段时间总结了spring和springmvc相关的知识,面试中常问到的除了这些基本的框架之外,还有底层的基础知识,比如与java虚拟机相关的知识点,这一部分也是面试中经常问到的,在面试中高级jav ...

  7. 18-matlab知识点复习一

    clc; clear; %% 输出 clc, clear; fprintf('%.19f', pi); fprintf('%d', 110); inf pi disp([1,3,5]) disp('a ...

  8. 记录一次网站邮箱(STMP)被恶意伪造事件

    网站运行了一段时间了,最近用户增加的比较多,突然有用户反馈说遇到骗子了,给我看了他跟骗子的邮件记录,发现骗子竟然可以用我们域名的邮件发邮件,真是被惊吓到了,赶紧开始查找问题. 首先怀疑是企业邮箱密码泄 ...

  9. 20175234 2018-2019-2 《Java程序设计》第七周学习总结

    目录 20175234 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 String类常用用法 Date类与Calendar类常用用法 Math类的常用方法 ...

  10. centos7 使用kubeadm 快速部署 kubernetes 国内源

    前言 搭建kubernetes时看文档以及资料走了很多弯路,so 整理了最后成功安装的过程已做记录.网上的搭建文章总是少一些步骤,想本人这样的小白总是部署不成功(^_^). 准备两台或两台以上的虚拟机 ...