(一) JsRender模板,被称为"下一代jQuery模板",为高性能的、纯粹基于字符串的呈现做了优化,并且不依赖于DOM或jQuery。在JsRender中,是通过调用方法render()来渲染模板的,换句话说,就是在Html文件中使用java script来输出html模板的内容。
一、什么是JsRender?
JsRender是一个简单、直观,强大、易扩展、轻量的最优UI模板。
换句话说,就是在Html文件中使用java script来输出html模板的内容。
二、附件是最新的jsrender.js和jsrender.min.js(2013/07/27),如果想下载最新的jsrender.js和jsrender.min.js,可以去官方文档下载:http://www.jsviews.com/#download
二、玩转JsRender
内置的模板标签(Built-in template tags)
1. {{: ...}}:用于输出"..."部分指定的数据,“...”部分是数据来源的路径或者是一个数据表达式,例如:{{:address.street}}
例子:
html代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
<%@ include file="/global/commonPage/includeHead/head.jsp" %>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jsrender.js"></script>
</head>
<body>
<div class="g-panel-body" style="height: 200px; overflow-y: auto">
<table align="center" cellpadding="2" cellspacing="2" class="table" style="color: #8c3901" >
<thead class="g-grid-hd">
<tr>
<td class="tdTitle" style="text-align: center" >姓名</td>
<td class="tdTitle" style="text-align: center">性别</td>
<td class="tdTitle" style="text-align: center">薪资</td>
<td class="tdTitle" style="text-align: center">电话</td>
</tr>
</thead>
<tbody id="result">
</tbody>
</table>
</div>
<div class="g-panel-body" style="height: 100px; overflow-y: auto">
<table align="center" cellpadding="1" cellspacing="1" class="table" style="color: #000033" >
<thead class="g-grid-hd">
<tr>
<td class="tdTitle" style="text-align: center; width:2%" >姓名</td>
</tr>
</thead>
<tbody id="result2">
</tbody>
</table>
</div>
<%--定义jsrender模板--%>
<script id="theTmpl" type="text/x-jsrender">
<tr>
<td class="tdEdit" style="text-align: center;">{{:name}}</td>
</tr>
</script>
<script>
//数据源
var data1 = {
"name": "王五",
"sex":"男",
"phone":"13623654567",
"pay":"15000"
}
var data2 = [
{
"name": "张三",
"sex":"男",
"phone":"13623654567",
"pay":"12000"
},
{
"name": "李四",
"sex":"女",
"phone":"13789378456",
"pay":"8000"
}
];
//渲染数据
var htmlOutput = $("#theTmpl").render(data1);
$("#result2").html(htmlOutput);
var template = $.templates("#theTmpl2");
var htmlOutput2 = template.render(data2);
$("#result").html(htmlOutput2);
$.templates("templ","#theTmpl");
$("#result2").html($.render.templ(data1));
</script>
</body>
</html> 其中:在jsRender中,#xxx 表示当前view的 xxx 属性, - 所以 #index 就是view.index
{{:#index}}
在JsRender中,是通过调用方法render()来渲染模板的。JsRender中,有三种方式调用render()方法来渲染模板。这其中用了两种,还一种方法是通过名字注册的template,如:
$.templates("templ","#theTmpl");
$("#result2").html($.render.templ(data1));运行结果如下

2. {{>...}} 用于输出encoded的html。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
<%@ include file="/global/commonPage/includeHead/head.jsp" %>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jsrender.js"></script>
</head>
<body>
<div class="g-panel-body" style="height: 200px; overflow-y: auto">
<table align="center" cellpadding="2" cellspacing="2" class="table" style="color: #8c3901" >
<thead class="g-grid-hd">
<tr>
<td class="tdTitle" style="text-align: center" >姓名</td>
<td class="tdTitle" style="text-align: center">性别</td>
<td class="tdTitle" style="text-align: center">薪资</td>
<td class="tdTitle" style="text-align: center">电话</td>
</tr>
</thead>
<tbody id="result">
</tbody>
</table>
</div>
<%--定义jsrender模板--%>
<script id="theTmpl" type="text/x-jsrender">
<tr>
<td class="tdEdit" style="text-align: center;">{{:name}}</td>
<td class="tdEdit" style="text-align: center;">{{>name}}</td>
</tr>
</script>
<script>
//数据源
var data1 ={"name":"<b>王五</b>"}
//渲染数据
var htmlOutput = $("#theTmpl").render(data1);
$("#result").html(htmlOutput);
</script>
</body>
</html>运行结果:
![]()
3. {{include tmpl=... /}} 标签用于组合模板(template composition) -----用于在一个模板中引入另一个模板,并用上下文的数据来渲染template。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
<%@ include file="/global/commonPage/includeHead/head.jsp" %>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jsrender.js"></script>
</head>
<body>
<div class="g-panel-body" style="height: 200px; overflow-y: auto">
<table align="center" cellpadding="2" cellspacing="2" class="table" style="color: #8c3901" >
<thead class="g-grid-hd">
<tr>
<td class="tdTitle" style="text-align: center" >姓名</td>
<td class="tdTitle" style="text-align: center">性别</td>
<td class="tdTitle" style="text-align: center">薪资</td>
<td class="tdTitle" style="text-align: center">电话</td>
</tr>
</thead>
<tbody id="result">
</tbody>
</table>
</div>
<%--定义jsrender模板--%>
<script id="theTmpl" type="text/x-jsrender">
<td class="tdEdit" style="text-align: center;">{{:anmont.pay}}</td>
</script>
<script id="theTmpl2" type="text/x-jsrender">
<tr>
<td class="tdEdit" style="text-align: center;">{{:#index}}:{{:name}}</td>
<td class="tdEdit" style="text-align: center;">{{:sex}}</td>
{{include tmpl="#theTmpl"/}}
<td class="tdEdit" style="text-align: center;">{{:phone}}</td>
</tr>
</script>
<script>
//数据源
var data2 = [
{
"name": "张三",
"sex":"男",
"phone":"13623654567",
"anmont":{"pay":"12000"}
},
{
"name": "李四",
"sex":"女",
"phone":"13789378456",
"anmont":{"pay":"8000"}
}
];
//渲染数据
var template = $.templates("#theTmpl2");
var htmlOutput2 = template.render(data2);
$("#result").html(htmlOutput2);
</script>
</body>
</html>运行结果

4. {{for ...}}遍历数组和对象,他会自动遍历第一层的内容。可以看前面1、{{:}},输出数据的介绍。
{{for··}}遍历多层数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
<%@ include file="/global/commonPage/includeHead/head.jsp" %>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jsrender.js"></script>
</head>
<body>
<div class="g-panel-body" style="height: 200px; overflow-y: auto">
<table align="center" cellpadding="2" cellspacing="2" class="table" style="color: #8c3901" >
<thead class="g-grid-hd">
<tr>
<td class="tdTitle" style="text-align: center">门店名称</td>
<td class="tdTitle" style="text-align: center">门店地址</td>
<td class="tdTitle" style="text-align: center">订单人姓名</td>
<td class="tdTitle" style="text-align: center">订单人电话</td>
<td class="tdTitle" style="text-align: center">产品价格</td>
<td class="tdTitle" style="text-align: center">产品数量</td>
<td class="tdTitle" style="text-align: center">支付金额</td>
</tr>
</thead>
<tbody id="result">
</tbody>
</table>
</div>
<%--定义jsrender模板--%>
<script id="theTmpl" type="text/x-jsrender">
<td class="tdEdit" style="text-align: center;">{{:anmont.pay}}</td>
</script>
<script id="theTmpl2" type="text/x-jsrender">
<tr>
<td class="tdEdit" style="text-align: center;">{{:storeName}}</td>
<td class="tdEdit" style="text-align: center;">{{:storeAdress}}</td>
{{for cont}}
<td class="tdEdit" style="text-align: center;">{{:productName}}</td>
<td class="tdEdit" style="text-align: center;">{{:productPhone}}</td>
{{for orderDaties}}
<td class="tdEdit" style="text-align: center;">{{:amont}}</td>
<td class="tdEdit" style="text-align: center;">{{:productNum}}</td>
<td class="tdEdit" style="text-align: center;">{{:productPrice}}</td>
{{/for}}
{{/for}}
</tr>
</script>
<script>
//数据源
var store={"storeName":"星巴克","storeAdress":"上海市山西南路"};
store.storeName="星巴克";
store.storeAdress="上海市山西南路";
var cont=[];
var contInformation={"productName":"李浩","productPhone":"13512345435","orderDaties":{"productPrice":"20","productNum":"2","amont":"80"}};
cont.push(contInformation);
store.cont=cont;
//渲染数据
$("#result").html($("#theTmpl2").render(store));
</script>
</body>
</html>运行结果

5. 条件表达式{{if··}},用于渲染数据表达式为true时的模板. 一般用于如下几种情况:
1) {{if pathOrExpr}}...{{/if}} 用于渲染满足条件的内容。
2) {{if pathOrExpr tmpl=nameOrExpr /}}用于渲染外部包含的模板。
3) {{if ...}}...{{else}}...{{/if}}
{{if pathOrExpr}...{{else}}...{{/if}}
{{if pathOrExpr1 tmpl=nameOrExpr1 }}{{else tmpl=nameOrExpr2 }}{{/if}}
4) {{if ....}}...{{else ...}}...{{else}}...{{/if}}
{{if pathOrExpr1}}...{{else pathOrExpr2}}...{{else}}...{{/if}
列:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
<%@ include file="/global/commonPage/includeHead/head.jsp" %>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=baseUrl%>/global/scripts/jsrender.js"></script>
</head>
<body>
<div class="g-panel-body" style="height: 200px; overflow-y: auto">
<table align="center" cellpadding="2" cellspacing="2" class="table" style="color: #8c3901" >
<thead class="g-grid-hd">
<tr>
<td class="tdTitle" style="text-align: center; width:20%" >姓名</td>
<td class="tdTitle" style="text-align: center; width:10%">性别</td>
<td class="tdTitle" style="text-align: center; width:10%">薪资</td>
</tr>
</thead>
<tbody id="result">
</tbody>
</table>
</div>
<%--定义jsrender模板--%>
<script id="theTmpl2" type="text/x-jsrender">
{{if pay > 10000}}
<tr class="g-grid-tr" style="background: red;">
{{else}}
<tr class="g-grid-tr" style="background: green;">
{{/if}}
<td class="tdEdit" style="text-align: center;">{{:#getIndex()}}:{{:name}}</td>
<td class="tdEdit" style="text-align: center;">{{:sex}}</td>
<td class="tdEdit" style="text-align: center;">{{>pay}}</td>
</tr>
</script>
<script>
//数据源
var data=[{"name":"张山","sex":"男","pay":"12000"},{"name":"李四","sex":"女","pay":"8000"},{"name":"王五","sex":"男","pay":"15000"}];
//渲染数据
$("#result").html($("#theTmpl2").render(data));
</script>
</body>
</html>运行结果:

还有一些其他的条件表达式:
| 表达式 | 举例 | 注释 |
| || | {{ :a || b }} | 或 |
| && | {{ :a && b }} | 且 |
| ! | {{ :!a }} | 非 |
| <= 和>=和 <和 > | {{ :a <= b }} | 比较 |
| === 和 !== | {{ :a === b }} | 等于和不等于 |
6. jsrender定义模板中样式,也可以使用html结构定义标签,例如:style:height,width。color等等。
原文:http://my.oschina.net/u/2415525/blog/490027