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. del_cursor 批量删除游标

    declare   cursor [del_cursor] is select a.*, a.rowid row_id from [table_name] a order by a.rowid;   ...

  2. python基础与docker

    创建虚拟环境python3 -m venv venv (说明:python 2.X 并不支持) 激活虚拟环境macOS/Linux: source venv/bin/activateWindows: ...

  3. 常用vi命令

    i  在当前光标处插入字符,并进入编辑模式 o 在当前光标插入下一行 x 从当前光标处向后删除一个字符. dd 删除当前光标处所在行 :q! 强制退出不保存 :q 退出(文本有改动则警告) :w 保存 ...

  4. 从零开始学spring cloud(九) -------- 超时机制,断路器模式介绍

    目前存在的问题: 现在我们假设一下,服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到服务返回.在高负载场景下,如果不做任何处理,这种问题很可能造成所有处理用户请求的线程都被耗竭,而 ...

  5. sql基本的增删查改语句

    1.增---用于向表中插入新的行/数据 语法:insert into 表名(值1,值2,值3...) values(值1,值2,值3,...) 或者 语法:insert [into] <表名&g ...

  6. centos7安装zabbix server

    1.参照下列网址方法,打开端口:80,3306,443,22,10050,10051(可能实际不需要打开这么多) https://www.cnblogs.com/lw-2019forlinuxpyth ...

  7. 炫酷MD风之dialog各种对话框

    这个demo也是我从别人那里学来的,不是本人写的代码,我也是个MD初学者.把这个demo分享给看到的你,希望对你有帮助. 直接上图: demo地址:百度网盘:链接:https://pan.baidu. ...

  8. python中的深浅copy

    https://www.cnblogs.com/Eva-J/p/5534037.html 转自Eva_J  分析的特别好

  9. Centos 安装 android sdk(转)

    原文地址: https://blog.csdn.net/kai_1215/article/details/80731099 这个后面有个指令没有运行起来,我做了一些修改: 原文:sdkmanager ...

  10. insmod 签名问题

    问题现象: 通过 insmod 加载 XXX.ko 时候提示: hello: module verification failed: signature and/or required key mis ...