亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

基于jQuery的JavaScript模版引擎JsRender使用指南

2019-11-20 13:33:58
字體:
來源:轉載
供稿:網友

前言

     JsRender是一款基于jQuery的JavaScript模版引擎,它具有如下特點:

          ?  簡單直觀

          ?  功能強大

          ?  可擴展的

          ?  快如閃電

     這些特性看起來很厲害,但幾乎每個模版引擎,都會這么宣傳。。。

     由于工作需要,小菜才接觸到此款模版引擎。使用了一段時間,發現它確實比較強大,但小菜覺得有些地方強大的過頭了,反倒讓人覺得很難理解。

     另一方面,JsRender的官方文檔比較詳細,但其他資料出奇的少,遇到點什么問題,基本搜不到,不僅僅是相關問題搜不到,幾乎就是沒有結果。

     再加上JsRender有些地方確實是不好理解,所以急需小菜分享一些“最佳實踐”。

     基于最近一段時間的使用,小菜總結了一些實用經驗,當然,這些經驗在官方文檔上是找不到的。

     注意:本文不是基礎入門教程,以下例子中自帶注釋,不做過多說明,讀者自行體會,不懂的地方可以留言。

 嵌套循環使用#parent訪問父級數據(不推薦)

復制代碼 代碼如下:

 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8">
     <title>嵌套循環使用#parent訪問父級數據 --- by 楊元</title>
     <style>
     </style>
   </head>
   <body>
     <div>
       <table>
         <thead>
           <tr>
             <th width="10%">序號</th>
             <th width="10%">姓名</th>
             <th width="80%">家庭成員</th>
           </tr>
         </thead>
         <tbody id="list">
         </tbody>
       </table>
     </div>
     <script src="jquery.min.js"></script>
     <script src="jsviews.js"></script>
     <!-- 定義JsRender模版 -->
     <script id="testTmpl" type="text/x-jsrender">
       <tr>
         <td>{{:#index + 1}}</td>
         <td>{{:name}}</td>
         <td>
           {{for family}}
             {{!-- 利用#parent訪問父級index --}}
             <b>{{:#parent.parent.index + 1}}.{{:#index + 1}}</b>
             {{!-- 利用#parent訪問父級數據,父級數據保存在data屬性中 --}}
             {{!-- #data相當于this --}}
             {{:#parent.parent.data.name}}的{{:#data}}
           {{/for}}
         </td>
       </tr>
     </script>
     <script>
       //數據源
       var dataSrouce = [{
         name: "張三",
         family: [
           "爸爸",
           "媽媽",
           "哥哥"
         ]
       },{
         name: "李四",
         family: [
           "爺爺",
           "奶奶",
           "叔叔"
         ]
       }];
       //渲染數據
       var html = $("#testTmpl").render(dataSrouce);
       $("#list").append(html);
     </script>
   </body>
 </html>

嵌套循環使用參數訪問父級數據(推薦)

復制代碼 代碼如下:

 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8">
     <title>嵌套循環使用參數訪問父級數據 --- by 楊元</title>
     <style>
     </style>
   </head>
   <body>
     <div>
       <table>
         <thead>
           <tr>
             <th width="10%">序號</th>
             <th width="10%">姓名</th>
             <th width="80%">家庭成員</th>
           </tr>
         </thead>
         <tbody id="list">
         </tbody>
       </table>
     </div>
     <script src="jquery.min.js"></script>
     <script src="jsviews.js"></script>
     <!-- 定義JsRender模版 -->
     <script id="testTmpl" type="text/x-jsrender">
       <tr>
         <td>{{:#index + 1}}</td>
         <td>{{:name}}</td>
         <td>
           {{!-- 使用for循環時,可以在后邊添加參數,參數必須以~開頭,多個參數用空格分隔 --}}
           {{!-- 通過參數,我們緩存了父級的數據,在子循環中通過訪問參數,就可以間接訪問父級數據 --}}
           {{for family ~parentIndex=#index ~parentName=name}}
             <b>{{:~parentIndex + 1}}.{{:#index + 1}}</b>
             {{!-- #data相當于this --}}
             {{:~parentName}}的{{:#data}}
           {{/for}}
         </td>
       </tr>
     </script>
     <script>
       //數據源
       var dataSrouce = [{
         name: "張三",
         family: [
           "爸爸",
           "媽媽",
           "哥哥"
         ]
       },{
         name: "李四",
         family: [
           "爺爺",
           "奶奶",
           "叔叔"
         ]
       }];
       //渲染數據
       var html = $("#testTmpl").render(dataSrouce);
       $("#list").append(html);
     </script>
   </body>
 </html>

 自定義標簽(custom tag)中使用else(強烈不推薦)

復制代碼 代碼如下:

 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8">
     <title>自定義標簽中使用else --- by 楊元</title>
     <style>
     </style>
   </head>
   <body>
     <div>
       <table>
         <thead>
           <tr>
             <th width="50%">名稱</th>
             <th width="50%">單價</th>
           </tr>
         </thead>
         <tbody id="list">
         </tbody>
       </table>
     </div>
     <script src="jquery.min.js"></script>
     <script src="jsviews.js"></script>
     <!-- 定義JsRender模版 -->
     <script id="testTmpl" type="text/x-jsrender">
       <tr>
         <td>{{:name}}</td>
         <td>
           {{!-- isShow為自定義標簽,price是傳入的參數,status是附加屬性 --}}
           {{isShow price status=0}}
             {{:price}}
           {{else price status=1}}
             --
           {{/isShow}}
         </td>
       </tr>
     </script>
     <script>
       //數據源
       var dataSrouce = [{
         name: "蘋果",
         price: 108
       },{
         name: "鴨梨",
         price: 370
       },{
         name: "桃子",
         price: 99
       },{
         name: "菠蘿",
         price: 371
       },{
         name: "橘子",
         price: 153
       }];
       //自定義標簽
       $.views.tags({
         "isShow": function(price){
           var temp=price+''.split('');
           if(this.tagCtx.props.status === 0){
             //判斷價格是否為水仙花數,如果是,則顯示,否則不顯示
             if(price==(Math.pow(parseInt(temp[0],10),3)+Math.pow(parseInt(temp[1],10),3)+Math.pow(parseInt(temp[2],10),3))){
               return this.tagCtxs[0].render();
             }else{
               return this.tagCtxs[1].render();
             }
           }else{
             return "";
           }
         }
       });
       //渲染數據
       var html = $("#testTmpl").render(dataSrouce);
       $("#list").append(html);
     </script>
   </body>
 </html>

用helper代替自定義標簽(推薦)

復制代碼 代碼如下:

 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8">
     <title>用helper代替自定義標簽 --- by 楊元</title>
     <style>
     </style>
   </head>
   <body>
     <div>
       <table>
         <thead>
           <tr>
             <th width="50%">名稱</th>
             <th width="50%">單價</th>
           </tr>
         </thead>
         <tbody id="list">
         </tbody>
       </table>
     </div>
     <script src="jquery.min.js"></script>
     <script src="jsviews.js"></script>
     <!-- 定義JsRender模版 -->
     <script id="testTmpl" type="text/x-jsrender">
       <tr>
         <td>{{:name}}</td>
         <td>
           {{!-- 利用原生的if做分支跳轉,利用helper做邏輯處理 --}}
           {{if ~isShow(price)}}
             {{:price}}
           {{else}}
             --
           {{/if}}
         </td>
       </tr>
     </script>
     <script>
       //數據源
       var dataSrouce = [{
         name: "蘋果",
         price: 108
       },{
         name: "鴨梨",
         price: 370
       },{
         name: "桃子",
         price: 99
       },{
         name: "菠蘿",
         price: 371
       },{
         name: "橘子",
         price: 153
       }];
       //Helper
       $.views.helpers({
         "isShow": function(price){
           var temp=price+''.split('');
           if(price==(Math.pow(parseInt(temp[0],10),3)+Math.pow(parseInt(temp[1],10),3)+Math.pow(parseInt(temp[2],10),3))){
             return true;
           }else{
             return false;
           }
         }
       });
       //渲染數據
       var html = $("#testTmpl").render(dataSrouce);
       $("#list").append(html);
     </script>
   </body>
 </html>

演示代碼打包下載:http://xiazai.VeVB.COm/201412/yuanma/JsRender_Demo(VeVB.COm).rar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97香蕉久久超级碰碰高清版| 色婷婷av一区二区三区久久| 日韩最新在线视频| 久久全国免费视频| 国产精品欧美一区二区| 国产一区二区黄| 国产又爽又黄的激情精品视频| 国产不卡在线观看| 亚洲天堂成人在线| 成人在线精品视频| 亚洲精品国产拍免费91在线| 久久夜色精品国产| 国产成人精品一区| 国产日韩在线看| 欧美亚洲另类激情另类| 亚洲精品欧美日韩| 国产福利成人在线| 国产一区二区黑人欧美xxxx| 亚洲天堂第一页| 欧美老少配视频| 亚洲精品成人免费| 青草热久免费精品视频| 久久综合久久美利坚合众国| 成人妇女免费播放久久久| 伊人伊成久久人综合网小说| 黄色一区二区在线| 国产中文字幕91| 日韩有码在线视频| 97精品国产97久久久久久| 久久天堂电影网| 夜夜狂射影院欧美极品| 91精品久久久久久久| 成人黄色短视频在线观看| 亚洲精品白浆高清久久久久久| 久久国产精品视频| 欧美激情一区二区三区在线视频观看| 精品久久久久久中文字幕一区奶水| 亚洲天堂av电影| 欧美日韩在线一区| 欧美最猛性xxxxx亚洲精品| 国产欧美在线播放| 亚洲国产成人爱av在线播放| 搡老女人一区二区三区视频tv| 久久久久久久久久婷婷| 久久久成人av| 日韩中文字幕在线免费观看| 亚州国产精品久久久| 在线视频免费一区二区| 91天堂在线视频| 亚洲高清免费观看高清完整版| 久久精品视频播放| 亚洲欧美成人在线| 日韩欧美亚洲一二三区| 国产精品欧美亚洲777777| 久久久电影免费观看完整版| 777精品视频| 国产精品黄色影片导航在线观看| 亚洲xxxx做受欧美| 国产精品久久久久9999| 精品中文字幕久久久久久| 亚洲视频自拍偷拍| 97成人精品区在线播放| 日韩av在线精品| 欧美日韩精品在线播放| 亚洲精品视频在线播放| 亚洲欧美另类国产| 日韩成人在线视频网站| 午夜精品久久久久久久白皮肤| 国内精品久久久久影院 日本资源| 国产欧美韩国高清| 亚洲精品日韩在线| 国产精品女人久久久久久| 欧美激情啊啊啊| 日本精品视频在线| 久久九九全国免费精品观看| 国产精品免费在线免费| 亚洲成色777777在线观看影院| 亚洲欧美精品伊人久久| 国产精品第100页| 欧美黑人一级爽快片淫片高清| 国产免费成人av| 色老头一区二区三区在线观看| 国产日产欧美a一级在线| 九九热在线精品视频| 日韩精品在线第一页| 992tv成人免费视频| 亚洲天堂视频在线观看| 久久久999精品免费| 中文字幕日韩高清| 亚洲精品久久久久久久久| 国产精品99久久久久久久久久久久| 中文字幕亚洲激情| 亚洲欧洲日产国码av系列天堂| 欧美日韩中文在线观看| 亚洲欧美日本另类| 欧美一级视频一区二区| 国产精品久久国产精品99gif| 热久久免费国产视频| 国产99视频在线观看| 国产999精品视频| 亚洲精品456在线播放狼人| 在线国产精品视频| 国产成人在线播放| 国产一区二区三区在线视频| 亚洲qvod图片区电影| 国产精品成人aaaaa网站| 91干在线观看| 亚洲欧美国产精品专区久久| 欧美在线视频免费观看| 久久成人这里只有精品| 日本精品久久久久久久| 宅男66日本亚洲欧美视频| 亚洲视频在线观看| 欧美日韩xxx| 欧美激情一区二区三区久久久| 久久亚洲国产精品成人av秋霞| 日韩精品视频免费| 九九热这里只有在线精品视| 亚洲欧洲黄色网| 日韩美女免费观看| 日本成人在线视频网址| 日韩欧美国产一区二区| 国产精品wwww| 国产视频精品一区二区三区| 色妞久久福利网| 久久精品国产91精品亚洲| 午夜精品99久久免费| 亚洲国产精彩中文乱码av| 久久久久久久久国产精品| 久久久久久久亚洲精品| 日韩中文字幕第一页| 国产视频精品久久久| 国产伦精品免费视频| 亚洲免费电影在线观看| 国产一区二区三区在线| 亚洲黄色在线看| 亚洲欧美在线播放| 91免费视频国产| 国产免费一区二区三区在线能观看| 欧美日韩亚洲一区二区| 亚洲国产精品国自产拍av秋霞| 日韩国产精品亚洲а∨天堂免| 92福利视频午夜1000合集在线观看| www.日韩不卡电影av| 国产亚洲欧美日韩精品| 欧美日韩成人免费| 欧美激情成人在线视频| 国产精品啪视频| 亚洲a级在线观看| 在线播放精品一区二区三区| 91精品国产91久久久久久不卡| 91久久久国产精品| 91黄色8090| 午夜精品久久久久久久99黑人| 91高清免费在线观看| 久久6精品影院| 日韩高清电影好看的电视剧电影| 中文字幕欧美亚洲| 亚洲第一av网站| 日韩精品在线观看一区| 欧美激情性做爰免费视频| 亚洲激情自拍图| 欧美性xxxx极品hd满灌| 亚洲综合在线中文字幕|