1.引入tempo.js

<script src="js/tempo.js" type="text/javascript"></script>

2.准备数据Data(标准的json数据)

var data = [
{'name':{'first':'Leonard','last':'Marx'},'nickname':'Chico','born':'March 21, 1887','actor': true,'solo_endeavours':[{'title':'Papa Romani'}]},
{'name':{'first':'Adolph','last':'Marx'},'nickname':'Harpo','born':'November 23, 1888','actor':true,'solo_endeavours':[{'title':'Too Many Kisses',
'rating':'favourite'},{'title':'Stage Door Canteen'}]},
{'name':{'first':'Julius Henry','last':'Marx'},'nickname':'Groucho','born': 'October 2, 1890','actor':true,'solo_endeavours':[{'title':'Copacabana'},
{'title':'Mr. Music','rating':'favourite'},{'title':'Double Dynamite'}]},
{'name':{'first':'Milton','last':'Marx'},'nickname':'Gummo','born':'October 23, 1892'},
{'name':{'first':'Herbert','last':'Marx'},'nickname':'Zeppo','born':'February 25, 1901','actor':true,'solo_endeavours':[{'title':'A Kiss in the Dark'}]}
];

3.Tempo.prepare().render()使用方式(需要找到承载数据的容器)

<script language="javascript" type="text/javascript"> $( function (){ Tempo.prepare( '呈现数据的容器ID' ).render(数据源); }); </script>

4.data-template(html数据展示)

<script type="text/javascript">
$(function () {
var data1 = { 'leonard': 'Leonard Marx', 'adolph': 'Adolph Marx', 'julius': 'Julius Henry Marx', 'milton': 'Milton Marx', 'herbert': 'Herbert Marx' };
var data2 = [{'name':{'first':'Leonard','last':'Marx'},'nickname':'Chico','born':'March 21, 1887','actor': true,'solo_endeavours':[{'title':'Papa Romani'}]},
{'name':{'first':'Adolph','last':'Marx'},'nickname':'Harpo','born':'November 23, 1888','actor':true,'solo_endeavours':[{'title':'Too Many Kisses','rating':'favourite'},{'title':'Stage Door Canteen'}]},
{'name':{'first':'Milton','last':'Marx'},'nickname':'Gummo','born':'October 23, 1892'},
{'name':{'first':'Herbert','last':'Marx'},'nickname':'Zeppo','born':'February 25, 1901','actor':true,'solo_endeavours':[{'title':'A Kiss in the Dark'}]}]; Tempo.prepare("list1").render(data1);
Tempo.prepare("list2").render(data2); });
</script> <fieldset>
<legend>简单数据展示</legend>
<ol id="list1">
<li data-template data-from-map>{{value}} - {{key | append '@marx.com'}}</li>
</ol>
</fieldset>
<fieldset>
<legend>嵌套数据展示</legend>
<ol id="list2">
<li data-template>
{{nickname}} {{name.last}}
<ul>
<li data-template-for="solo_endeavours">{{title}}</li>
</ul>
</li>
</ol>
</fieldset>

5.对字段数据格式化

{{ field | truncate 25[, 'optional_suffix'] }}
截取字符串 使用方法:{{字段名|truncate 长度}} {{ field | format[, numberOfDecimals] }}
保留小数后的位数 使用方法:{{字段名|format 位数}} {{ field | default 'default value' }}
如果字段未定义和值为NULL时显示的默认值 使用方式:{{字段名| default '默认值'}} {{ field | date 'preset or pattern like HH:mm, DD-MM-YYYY'[, 'UTC'] }}
日期格式化 使用方式{{字段名 | date 'YYYY-MM-DD HH:mm:ss'}} {{ field | trim }}
清除开始和结尾的空格 {{ field | upper }}
改变任何小写字符的值为大写。 {{ field | lower }}
改变任何小写字符的值为小写。 {{ field | titlecase[, '需要过滤的字符串'] }}
对标题进行过滤不显示的字符 {{ field | append '需要添加的字符串' }}
如果字段非空,添加后缀和其它字符串 {{ field | prepend 'some prefix ' }}
如果字段非空,添加前缀或者其它字符串 {{ field | join 'separator' }}
如果此字段是一个数组,则往该数组里添加一个项

6.字段值转义

Tempo.prepare('marx-brothers', {'escape': false}).render(data);

7. template.when(type, handler)

Type 事件类型 的值

    • TempoEvent.Types.RENDER_STARTING :模板替换开始
    • TempoEvent.Types.ITEM_RENDER_STARTING :数据项替换开始
    • TempoEvent.Types.ITEM_RENDER_COMPLETE : 数据项替换完成
    • TempoEvent.Types.RENDER_COMPLETE :模板替换完成
    • TempoEvent.Types.BEFORE_CLEAR : 在清理数据之前
    • TempoEvent.Types.AFTER_CLEAR : 在清理数据之后 

handler (function(){})

8.加载数据时前后事件的处理,事件注册

1.
Tempo.prepare('tweets').when(TempoEvent.Types.RENDER_STARTING, function (event) {
$('#tweets').addClass('loading');
}).when(TempoEvent.Types.RENDER_COMPLETE, function (event) {
$('#tweets').removeClass('loading');
}).render(data); 2.template.starting()手动调用开始事件
var template = Tempo.prepare('tweets').when(TempoEvent.Types.RENDER_STARTING, function (event) {
$('#tweets').addClass('loading');
}).when(TempoEvent.Types.RENDER_COMPLETE, function (event) {
$('#tweets').removeClass('loading');
});
template.starting();
$.getJSON(url, function(data) {
template.render(data.results);
}); 3. jQuery live() 事件
$('ol li').live('click', function() {
// Do something with the clicked element
alert(this);
});

9.条件选择模板 if....else...

{% if javascript-expression %} ... {% else %} ... {% endif %}   //{% else %} 为可选块
Data-if-字段名="值"
<li data-template data-if-sex="母">{{Name}}</a></li> Data-has="是否存在的字段"
<li data-template data-has="ifBianZhong">{{Name}}</a></li> Data-src="{{字段名|append '.png'}}"
<img src="1.gif" data-src="{{Image| append '.png'}}" />

js渲染引擎 tempo.js的更多相关文章

  1. 【repost】浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...

  2. 浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: fire ...

  3. 【转】浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...

  4. 浏览器内核、渲染引擎、JS引擎简介

    一.定义 浏览器内核分成两部分:渲染引擎和JS引擎. 由于JS引擎越来越独立,浏览器内核 就倾向于 单指 渲染引擎.  渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具.(说白了,就是按照 ...

  5. js模版引擎handlebars.js实用教程

    js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...

  6. js模版引擎handlebars.js实用教程——为什么选择Handlebars.js

    返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...

  7. JS模板引擎handlebars.js的简单使用

    handlebars.js的使用 首先我们要明白handlebars.js是干什么用的,我们知道使用jsp很麻烦, 于是我们开始使用freemarker等模板引擎,但这个只是针对服务器端来解 析的,那 ...

  8. JS 模板引擎 Handlebars.js 中文说明

    Handlebars 为你提供了一个可以毫无挫折感的高效率书写 语义化的模板 所必需的一切. Mustache 模板和 Handlebars 是兼容的,所以你可以把Mustache模板拿来导入到Han ...

  9. js模版引擎handlebars.js实用教程——目录

    写在开头的话: 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的一些问题. 实际上,小菜写这篇文 ...

随机推荐

  1. 常用的bat命令

    获取输入法adb shell settings get secure default_input_method修改输入法adb shell settings put secure default_in ...

  2. Qt 学习之路:存储容器

    存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特定类型的对象,通常是一些常用的数据结构,一般是通用模板类的形式.C++ 提供了一套完整的解决方案, ...

  3. 一些Linux优化方法

    1. 利用栈做备胎,减少分配空间的几率,IO自己有一份缓存,如果超了就使用stack空间 2. 分散IO:代表readv,可以通过一次系统调用,将内容读到分散的缓存中,可以减少系统的系统调用

  4. 微信,QQ这类IM app怎么做——谈谈Websocket

    前言 关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作.直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈 ...

  5. apk代码的破解

    方法一:dexdump方法(效果很不好,推荐指数*) 1.搜索到dexdump.exe所在目录: 2.将apk包中的**.dex文件存放到上面目录: 3.命令行中进入上面目录,执行:dexdump   ...

  6. oracle 添加自增索引

    1.添加一个Sequence,此处为ID_SEQUENCE. 2.添加对应表,并设置主键 3.设置触发器 create or replace trigger sys.id_add before ins ...

  7. C#HttpWebResponse请求常见的状态码

    成员名称 说明 Continue 等效于 HTTP 状态 100.Continue 指示客户端可能继续其请求. SwitchingProtocols 等效于 HTTP 状态 101.Switching ...

  8. editplus双击单词语法高亮显示设置

    view=>Word Highlighting

  9. 编写高效SQL最佳实践

    编写高效 SQL 语句的最佳实践 秦玮, 高级软件工程师, IBM 王广成, 软件工程师, IBM 王韵婷, 高级软件工程师, IBM 简介: 本文列举了一些在编写 SQL 查询语句时可能导致 DB2 ...

  10. HTML5 文件域+FileReader 读取文件(一)

    在HTML5以前,HTML的文件上传域的功能具有很大的局限性,这种局限性主要体现在如下两点: 每次只能选择一个文件进行上传 客户端代码只能获取被上传文件的文件路径,无法访问实际的文件内容 一.File ...