引入artTemplate.js

<script type="text/javascript" src="${ctx}/assets/plugins/artTemplate/3.0.1/template.js"></script>

方法

1.template(id, data)

文档示例:

 <div id="content"></div>
<script id="test" type="text/html">
<h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>狗子{{i + 1}} :{{value}}</li> //value是list中的数据。
{{/each}}
</ul>
</script>
 var data = {
title: '宝宝喜欢的狗种类',
list: ['拉布拉多', '萨摩耶', '塞罗纳', '边牧', '京巴', '牛头梗', '松狮']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;

显示结果:

<div id="content">
<h1>宝宝喜欢的狗种类</h1>
<ul>
<li>狗子1:拉布拉多</li>
<li>狗子2:萨摩耶</li>
<li>狗子3:塞罗纳</li>
<li>狗子4:边牧</li>
<li>狗子5:京巴</li>
<li>狗子6:牛头梗</li>
<li>狗子7:松狮</li>
</ul>
</div>

项目实际一:

根据id,将data渲染至模板。如果没有 data 参数,那么将返回一渲染函数。

创建模版,并使用ajax请求公共组件app-jquery-http.js请求数据渲染至模版。

(1)创建模版:

 <div id="banner">
<ul id="bannerList"> </ul>
<script type="text/html" id="bannerListTmp"> //先通过(2)请求到数据,才能加载数据到模版。
{{each sub as value i }} // 等价于:for(var i in sub) ,由(2)可知sub是数组
<li><img src="{{value.imgPath}}" /></li> // {{}}
{{/each}}
</script>
</div>

(2)请求数据渲染模版。

原生js方式。

 $.ajax({
type :"GET",
async : false,
url : ../bbs/topic/list,
data : {isBanner:true,pageSize:5},
dataType : "json",
success:function(list){
$("#bannerList").html(template("bannerListTmp",{sub:list}));
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
var info = "XMLHttpRequest:" + JSON.stringify(XMLHttpRequest)+ " ;textStatus:" + textStatus + "; errorThrown:"+ JSON.stringify(errorThrown) + ";【" + url + "】";
console.log(info);
});

使用app-jquery-http.js 方式。

     $.HTTP.list({                    //type:"GET"
url : "../bbs/topic/list",
ajaxData : { //GET请求 将数据附加在url后,附加后的url为:http://127.0.0.1:8080/geekbar/bbs/topic/list?isBanner=true&pageSize=5
isBanner : true, //在链接后拼接形如:?a=1&b=2,不影响链接本身。
pageSize : 5
},
ajaxOption : {
async : false //同步请求:锁住浏览器,必须等到该请求结束后才能进行其他操作。
},
success : function(list) { //list为一个json数组:[object,object,...,object]
$("#bannerList").html(template("bannerListTmp", {sub : list})); //template(id,data);
}
});

请求到的list如下:

项目实际二:

1.创建模版:

 <form action="" id="infoDetail">
</form>
<script type="text/html" id="infoDetailTmp">
<img src="{{imgPath}}" />
<label>姓名</label>
<input type="text" readonly value="{{nickname}}" />
<label>性别</label>
<input type="text" value="{{if sex==0}}男{{else}}女{{/if}}" readonly />
<label>手机号</label>
<input type="text" readonly value="{{telephone}}" />
<label>个人标签</label>
<input type="text" readonly value="{{tag}}" />
</script>

2.渲染数据:

 <script>
var userInfo = {};
$.HTTP.obj({ //type:post
url : "../rest/user/detailInfo",
success : function(json)(){ //json数据如下图所示
userInfo = json.data;
var html = template('infoDetailTmp', userInfo);
document.getElementById("infoDetail").innerHTML = html;
}
});
</script>

2.template helper(name, callback)

学渣表示到现在没看懂文档里时间格式器的例子   = =|||

项目实际一:

 <span>{{value.state | getOrderState}}</span>  // value.state就是请求到的数据中的list数组中每一个对象的state数据。
  $.HTTP.list({
url : "rest/order/mylist.json",
ajaxData : {
pageNo : pageNo,
pageSize : 5,
search : searchInput.val(),
state : state
},
success : function(list, pInfo) { //该请求可以获得两个参数:list和pageInfo
var d = template("myOrderTmp", {
sub : list //each sub as value i
});
$("#myOrderList").append(d);
pageInfo = pInfo;
}
});

 template.helper("getOrderState", function(state) {    //该state可以任意命名,但是必须与后面的保持一致,这个数据是value.state得来的。
if(state == -2) { //均为state的数据
return "已取消";
}
if(state == -1) {
return "待下单";
}
if(state == 0) {
return "已寄出";
}
if(state == 3) {
return "已检测";
}
if(state == 4) {
return "维修中";
}
if(state == 5) {
return "待付款";
}
if(state == 6) {
return "待寄回";
}
if(state == 7) {
return "待签收";
}
if(state == 8) {
return "订单完成";
}
if(state == 1) {
return "正在检测";
}
});

使用switch...case

 template.helper("getOrderState", function(state) {   //该state可以任意命名,但是必须知道它表示的是 value.state,value的值又是请求得到数据中的list数组中的数据。
switch(state){
case -2:
return "已取消";
break;
case -1:
return "待下单";
break;
case 0:
return "已寄出";
break;
case 3:
return "已检测";
break;
case 4:
return "维修中";
break;
case 5:
return "待付款";
break;
case 6:
return "待寄回";
break;
case 7:
return "待签收";
break;
case 8:
return "订单完成";
break;
case 1:
return "正在检测";
break;
default:
break;
}
});

项目实际二:

<a href="{{value | getOrderDetailUrl}}" target="_self"></a>   //value 就是请求到的data数据。
 $.HTTP.obj ({
url : "../rest/order/mylistDetail.json",
ajaxData :
{
orderNo : orderNo
},
success : function (data) //对应的就是上一个代码的value。
{
var navhtml = $ (template ("navTmp", data));
var nav = $ ("#nav").html (navhtml);
}
});

 template.helper("getOrderDetailUrl", function(data0) {     //此data0可以任意命名,但是必须知道的是它代表着请求到的data数据,
if(data0.state == -2) {
return "order-detail-waitdo.jsp?orderNo=" + data0.orderNo;
}
if(data0.state == -1) {
return "order-detail-waitdo.jsp?orderNo=" + data0.orderNo;
}
if(data0.state == 0) {
return "order-detail-waitdo.jsp?orderNo=" + data0.orderNo;
}
if(data0.state == 3) {
return "order-detail-testres.jsp?orderNo=" + data.orderNo;
}
if(data0.state == 4) {
return "order-detail-testres.jsp?orderNo=" + data0.orderNo;
}
if(data0.state == 5) {
return "order-detail-pay.jsp?orderNo=" + data0.orderNo;
}
if(data0.state == 6) {
return "order-detail-rtservice.jsp?orderNo=" + data.orderNo;
}
if(data0.state == 7) {
return "order-detail-rtservice.jsp?orderNo=" + data0.orderNo;
}
if(data0.state == 8) {
return "order-detail-rtservice.jsp?orderNo=" + data0.orderNo;
}
return "order-detail-waitdo.jsp?orderNo=" + data0.orderNo;
});

项目实际三:

 {{#fixCheckInfo | getCheckInfoHtml}}
 template.helper("getCheckInfoHtml",function(c) {
var checkInfo = {};
var ck = $.parseJSON(c);
for(var i in ck) {
if(checkInfo[ck[i].v.toString()] == undefined) {
checkInfo[ck[i].v.toString()] = [];
}
checkInfo[ck[i].v.toString()].push(ck[i].k); //分类成下面三种数组
} var res = '<p class="text-top">检测项目通过 <img src="data:images/check-1.png" /></p><table>'; for(var i in checkInfo['1']) {
var x = checkInfo['1'][i];
res += '<td>' + x + '</td>';
if((i + 1) % 3 == 0) {
res += '</tr><tr>';
}
}
res += '</table>' +
'<p class="text-top">检测项目未通过 <img src="data:images/check-2.png" /></p><table>';
for(var i in checkInfo['0']) {
var x = checkInfo['0'][i];
res += '<td>' + x + '</td>';
if((i + 1) % 3 == 0) {
res += '</tr><tr>';
}
}
res += '</table>' +
'<p class="text-top">检测项目未知 <img src="data:images/check-3.png" /></p><table>';
for(var i in checkInfo['-1']) {
var x = checkInfo['-1'][i];
res += '<td>' + x + '</td>';
if((i + 1) % 3 == 0) {
res += '</tr><tr>';
}
}
res += '</table>'; return res;
});

fixCheckInfo:

artTemplate-3.0(与项目实际结合)的更多相关文章

  1. 如何使用maven建一个web3.0的项目

    使用eclipse手动建一个maven的web project可能会有版本不合适的情况,例如使用spring的websocket需要web3.0什么的,不全面的修改可能会出现各种红叉,甚是苦恼.我从我 ...

  2. MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题

    ///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...

  3. Angular2.0的项目架构

    Angular2.0的项目架构 一.项目服务端app a) Controller控制器 b) Router路由 c) Service服务 d) Public公共样式及脚本和图片等静态资源 e) Vie ...

  4. ASP.NET Core 2.0 : 三. 项目结构

    本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Core 2.0的项目结构.(此后的文章也尽量这样对比着, 方便学习理解.) 关注差异, 也为项目迁移做准备. 新建项目 ...

  5. OkGo3.0 --真实项目使用和二次封装(转)

    转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480  11.OkGo3.0真实项目使用和二次封装: ====  11.OkG ...

  6. 我人生做过的第一个信息化项目--TIPTOP 5.0 ERP项目

    我人生做过的第一个信息化项目--TIPTOP 5.0 ERP项目 2008年8月毕业不久,我参与了我人生的第一个信息化项目:TIPTOP 5.0 ERP项目.

  7. ZH奶酪:LAMP环境中如何重新部署一个Yii2.0 web项目

    使用Yii2.0 framework开发的项目,使用Github进行版本控制,现在要把这个项目部署到一个新的电脑/系统中: (1)安装LAMP (2)在/var/www/html目录下执行 git c ...

  8. cocos2d-x 3.0 创建项目

    cocos2d-x 3.0 创建项目  点击打开链接

  9. Win7下vc++6.0打开项目出现问题的解决方案

    Win7下vc++6.0打开项目出现Microsoft(R) Developer Studio以及Unable to register this add-in because its DLLRegis ...

  10. vue-cli3.0启动项目,在局域网内其他电脑通过自己ip访问

    最近一直在使用vue-cli3.0做项目, package.json中配置后,自启动项目,也就没留意过小黑窗, "scripts": { "serve": &q ...

随机推荐

  1. C#后台绑定ComboBox

    C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...

  2. [分享]Host文件的原理解释及应用说明

    Host文件的原理解释及应用说明   Host文件位置及打开方式:   Window系统中有个Hosts文件(没有后缀名), Windows 98系统下该文件在Windows目录,在Windows 2 ...

  3. 美团,点评,澎湃等APP的启示

    事先声明,因个人能力尚浅,文章若有不足之处,望留言指出,也欢迎成为好朋友. 本来想打算写团购类APP的竞品分析,但是发现不管是天天果园这样生鲜APP,还是澎湃这样的新闻资讯APP,思路差不多,都是: ...

  4. 编译使用tinyxml

    环境: win7 32位旗舰版,VS2010,tinyxml_2_6_2版本 1.下载tinyxml,并解压到tinyxml文件夹下 2.生成动态链接库 原生的Tinyxml只支持静态库(没有在.h文 ...

  5. linux的学习系列 7---管道和过滤器

    有时候,我们可以把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就叫做管道.为了建立管道,需要在两个命令之间使用竖线(|)连接. 管道是Linux进程之间一种重要的通信机制:除了管道,还有 ...

  6. [转]SSL协议详解

    背景介绍    最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SSl介绍之前,先给大家介绍几个密码学的概念和相关的知识.     1.密 ...

  7. mapreduce 顺序组合

    import java.io.IOException;import java.util.StringTokenizer; import org.apache.hadoop.conf.Configura ...

  8. UVALive - 4026 Difficult Melody(暴力)

    我这个英语学渣又把题给翻译错了……(话说,六级差十分没有过,好心疼T T),题目中说的P和Q都是计算game的个数,我以为是出现的次数,各种wa..后来调整了以后又是各种wa,原来是double型的数 ...

  9. context-param与init-param的区别与作用

    <context-param>的作用: web.xml的配置中<context-param>配置作用 1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件 ...

  10. Chapter 1 First Sight——13

    It was just drizzling still, not enough to soak me through immediately as I reached for the house ke ...