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. linux/centOS 下安装 ngnix

    Nginx 是一款轻量级的 Web 服务器/反向代理服务器,比较流行,建议在 Linux 下安装运行. Nginx 需要的依赖 它们包括:gcc,openssl,zlib,pcre(可通过rpm -q ...

  2. vue加elementui开发的分页显示

    由于我的是公共引入样式表和css表所以,将公共的也写出来了(我接手的项目为基于vue开发的) 公共的index.html 引入js <script src="{MODULE_URL}s ...

  3. 企业BGP网络规划案例(一)

    网络拓扑: 如上图为一家企业的办公网,分为总部AS6500,分公司AS65001和分公司AS65002,其中每个站点都有生产.办公和服务器区域的网络互访,分公司和总公司之间通过两条联通/电信的MSTP ...

  4. go语言语法基础

    1. go标记 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号 如:fmt.Println("hello world") 2.行分隔符 在 Go 程序中,一 ...

  5. ThreadPoolExecutor源码详解

    ExecutorService使用线程池中可用的线程执行每个提交的任务,这些线程通常都是使用工厂方法配置 线程池解决两种不同的问题:提高处理大量异步任务的性能(通过减少每个线程的唤醒时间) 提供一种管 ...

  6. L2-018 多项式A除以B(模拟)

    这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A,再给出B.每行的 ...

  7. Checkbox的只读设置

    readonly和disabled属性均不生效.可按如下方式处理,记得引入jquery.js文件 <input type="checkbox" name="chk& ...

  8. Taro button点击切换选中状态

    1.引入组件 2.state中设置选中状态 // button按钮的默认选中,0代表选中 state = { currentIndex: 0 } 3.设置class的样式,点击更改选中 selectN ...

  9. html模板导出pdf文件

    package com.crc.commonreport.util; import java.awt.Insets; import java.io.ByteArrayOutputStream; imp ...

  10. weex h5开发区别-实践初级篇

    html标签 weex中没有标签的概念,html中标签对应于weex中的Components weex 无<span> .<p> ,用<text>替代.但是< ...