BaiDu Template
BaiduTempalte的優點:
- 學習成本低,採用javaScript原生的語言,所以效率比較高。
- 預設的HTML轉義,防XSS攻擊,並支援url等多種轉義。
- 變數未定義時,自動輸出為空,防止頁面錯亂,功能強大。
例子:
- 如何定義模板塊程式碼?
- 模版塊可以放在
<script type="text/template" id="template-test">
<div>
<h1>title: <%= title %></h1>
<% for(var i = 0; i < 9 ; i++){ %>
<h2>二級標題:<%= i %></h2>
<ul>
<% for(var j = 0 ; j < 3; j++){ %>
<li>li <%=list[j]%></li>
<% } %>
</ul>
<% } %>
</div>
</script>
- 使用模板?
<script>
var data = {
'title':'baiduTemplate',
'list':["data1", "data2", "data3"],
};
var html = baidu.template('template-test' ,data);
$("#box").html(html);
</script>
- 還可以這樣的方法使用模板
<script>
var data = {
'title':'baiduTemplate',
'list':["data1", "data2", "data3"],
};
var temp = baidu.template;
var fun = temp('template-test');
var html = fun(data);
$("#box").html(html);
</script>
### 總結
1. 在使用AJax獲取Json資料檔案,或者伺服器端獲取Json資料檔案時,可以通過javaScript來操作
2. 模板可以再頁面中定義,也可以通過伺服器通過字串的型別返回
3. baidu.template() 傳入兩個引數,一個是選區模組的DOM節點,另一個節點是需要傳入選區模板的資料。
4. 下面有個大例子:
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="keywords" content="baidu template" />
<meta name="description" content="javascript前端模板" />
<title>test</title>
<script type="text/javascript" src="baiduTemplate.js"></script>
</head>
<body>
<h3>BaiduTemplate單元測試用例</h3>
<!-- 測試模板1開始 -->
<script id='t:_1234-abcd-1' type="text/template">
<br>
1、基本輸出(自動HTML轉義): <%=value1%>
<br>
<br>
2、容錯寫法: <%=value2;%>
<br>
<br>
3、不轉義輸出: <%:=value3%> 或 <%-value3%>
<br>
<br>
4、容錯寫法: <%:=value4;%>
<br>
<br>
5、URL轉義輸出: <%:u=value5%>
<br>
<br>
6、容錯寫法: <%:u=value6;%>
<br>
<br>
7、UI變數在頁面標籤事件中使用轉義: <%:v=value7%>
<br>
<br>
8、容錯寫法:<%:v=value8;%>
<br>
<br>
9、HTML轉義輸出:<%:h=value9%>
<br>
<br>
10、容錯寫法:<%:h=value10;%>
<br>
<br>
11、變數未定義自動輸出空:<%=value11%>
<br>
<br>
12、模板直接輸出特殊字元:5個斜槓 ///// 5個單引 ‘’‘’‘ 5個雙引 “”“”“
<br>
<br>
13、註釋:
<!-- HTML註釋支援 -->
<%* 模板自帶註釋 *%>
<% //js註釋方式
%>
<br>
<br>
14、判斷語句:
<%if(value14){%>
<input type="text" value="<%:v=value14%>"/>
<%}else{%>
無值
<%}%>
<br>
<br>
15、迴圈語句:
<br>
<ul>
<%for(var i=0;i<value17.length;i++){%>
<li><%=value17[i]%></li>
<%}%>
</ul>
<br>
<br>
16、a標籤 <br>
單引問題:<a target='_blank' href='http://www.baidu.com ' onclick='alert("test");'>test</a><br>
雙引問題:<a target="_blank" href="http://www.baidu.com" onclick="alert('test');">test</a><br>
17、定義變數:
<%var varTest1 = value1%>
varTest1: <%=varTest1;%>
<br>
18、定義變數容錯:
<%var varTest2 = value2;%>
varTest2: <%=varTest2%>
<br>
</script>
<!-- 測試模板1結束 -->
<div id="results"></div>
<script type="text/javascript">
window.onload=function(){
//測試資料,對應每個用例
var data={
value1:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value2:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value3:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value4:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value5:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value6:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value7:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span><span style="color:red;">\\\'\"</span>',
value8:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span><span style="color:red;">\\\'\"</span>',
value9:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value10:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value14:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value15:'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>',
value16:['<span style="color:red;">這是value</span>',123,'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>'],
value17:['<span style="color:red;">這是value</span>',123,'<span style="color:red;">http://wangxiao.github.com/BaiduTemplate/</span>']
};
//使用
var bat=baidu.template;
//設定分隔符
//bat.LEFT_DELIMITER='<!';
//bat.RIGHT_DELIMITER='!>';
//設定預設是否轉義
//bat.ESCAPE = false;
var timestart = new Date().getTime();
//輸出函式
var fun=bat('t:_1234-abcd-1');
var timeend = new Date().getTime();
alert('最大話編譯一次時間:'+(timeend-timestart)+'毫秒');
timestart = new Date().getTime();
//輸出HTML
var html=bat('t:_1234-abcd-1',data);
timeend = new Date().getTime();
alert('執行時間:'+(timeend-timestart)+'毫秒');
//顯示結果
document.getElementById('results').innerHTML=html;
}
</script>
</body>
</html>
最後一例引自:https://github.com/BaiduFE/BaiduTemplate/blob/master/test.html
相關文章
- Vue Baidu Map使用VueAI
- go text/template & Consul-templateGo
- ansible template
- template might not exist or might not be accessible by any of the configured Template Resolvers
- c++ 模板模板引數("Template Template Parameters")C++
- ES 筆記十四:Index Template 和 Dynamic Template筆記Index
- Python 爬取 baidu 股票市值資料PythonAI
- Vue template To JSXVueJS
- C_template
- Mendix Page Template
- go template使用Go
- template0 的 age 問題. vacuum template0
- [論文解讀]Baidu Apollo EM Motion PlannerAI
- 【雜談】Starter Template
- 模板方法模式(Template)模式
- C++之templateC++
- [Javascript] HTML Template InterpolationJavaScriptHTML
- [Javascript] template literal tagJavaScript
- elasticsearch之search templateElasticsearch
- Python:Template模板字串Python字串
- 按下www.baidu.com發生什麼AI
- mac ping:can not resolve www.baidu.com:Unknown hostMacAI
- 請求 www.baidu.com 背後的故事AI
- SpringBoot+ajax踩的坑Error resolving template, template might not exist or might not be accessibleSpring BootError
- OLAP系統解析:Apache Kylin和Baidu Palo哪家強?ApacheAI
- 為什麼我抓不到baidu的資料包AI
- c++11-17 模板核心知識(十四)—— 解析模板之依賴型模板名稱 Dependent Names of Templates(.template/->template/::template)C++
- 標準庫之template
- 關於vue-baidu-map的一些記錄VueAI
- 一個簡單template engine
- C++開發:template,模板C++
- WPF 資料模板Data Template
- Vue中的template配置項Vue
- 0115 springboot template方式操作mongodbSpring BootMongoDB
- c++11-17 模板核心知識(十二)—— 模板的模板引數 Template Template ParametersC++
- 小程式 template 模版使用方法
- lecture8 Template Classes + Const Correctness
- Go HTML/template 模板使用方法GoHTML
- 利用CSP探測網站登陸狀態(alipay/baidu為例)網站AI