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. python入门(十二):面向对象

    1.场景:玩过游戏.主人公,进入了一个场景,有10个小怪物是一样的.有攻击力,血(100格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物出现在屏幕的地点. 可以使用字典来进行记录: {&quo ...

  2. heat-engine组件

    1.heat-engine启动一个rpc server端,EngineService在初始化时加载heat.clients插件和初始化env, env中包括各种资源关键字对应的映射类和constrai ...

  3. java itext替换PDF中的文本

    itext没有提供直接替换PDF文本的接口,我们可以通过在原有的文本区域覆盖一个遮挡层,再在上面加上文本来实现. 所需jar包: 1.先在PDF需要替换的位置覆盖一个白色遮挡层(颜色可根据PDF文字背 ...

  4. step_by_step_记录一个javascript字符串处理问题

    记录一个javascript字符串处理的问题 这一天下班,技术QQ群里的大神提出了一个问题,带着问题去思考. ? '---9890.999008-555555-55555555----' 对于这样的字 ...

  5. 线程和进程PYTHON

    基本概念: 计算机一次只能运行一个进程,而一个进程又可以有多个线程,例如百度网盘的上传和下载. 1.线程的创建 .调用threading模块 .创建线程theading.Threads(target ...

  6. webpack优化以及node版本

    最近做的这个项目webpack用的是1.X的版本,真的非常多的坑,然后最近在疯狂的做优化: 事情的起因是每次我npm run dev的时侯都需要5分钟+,这个速度真的是难以忍受,然后就尝试去做项目的优 ...

  7. 关于jqGrid组件数据显示不出问题

    jqGrid组件一开始怎么数据都返回了渲染不出来,查找了一天,最后发现点击搜索之后doSearch()事件触发的方法并不是数据请求接口,而是再次请求了初次登录的接口,从初次登录返回的数据,数据格式没问 ...

  8. js对象属性 通过点(.) 和 方括号([]) 的不同之处

    //    js对象属性 通过点(.) 和 方括号([]) 的不同之处 //    1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js ...

  9. 视频剪辑软件原型-videocut

    制作软件:墨刀 分享网址:<iframe src="https://modao.cc/app/fb0e31590711295ebebdf50fff7dd9861b7a9c1d/embe ...

  10. 配置Linux客户端使用socks5代理上网

    配置Linux客户端使用socks5代理上网   背景 有访问google或者其他海外网站需求的同学可能大都用过或者听过ss,在Windows.Mac.Android.IOS都有现成可用的客户端来协助 ...