zoukankan      html  css  js  c++  java
  • 使用jquery-tmpl使JavaScript与HTML分离

    背景:由于对JavaScript字符串拼接JavaScript变量产生了反感,也想用用JavaScript模板库,看了几个,由于时间原因选择了jQuery.tmpl.js,因为Visual Studio 对其的语法高亮支持。

    0. 下载 jQuery templates plugin

    jQuery Templates plugin vBeta1.0.0

    1. 准备工作

    1.1 JSON数据

    JSON数据在这里类似于“接口文档”,明确哪些数据必须对应到HTML的哪个位置,还有一些作为判断条件的字段,可以根据字段不同的值来显示不同的样式;这里采用一段经转换(JSON.parse(/*JSON String*/))好的数据

     1 var MockResponseFromServer = {
     2     code: '1', // '1'表示获取数据成功
     3     data: [
     4     {
     5         productid: "001",
     6         productname: "Lumia 930",
     7         productnumber: "GD1502001",
     8         productpic: "http://www.globalmediahk.com/uploads/magazine/15/3cc3ca3f-a403-42d9-a850-b9d08c88fd48.jpg",
     9         memberprice: 35,
    10         price: 35,
    11         quantity: 0
    12     },
    13     {
    14         productid: "002",
    15         productname: "Lumia 520",
    16         productnumber: "GD1502002",
    17         productpic: "http://blog.orange.pl/uploads/media/b/9/c/5/3/189d1cfd42952ad73b4d91c4700016151d0",
    18         memberprice: 35,
    19         price: 35,
    20         quantity: 0
    21     }],
    22     msg: '成功'
    23 };

    1.2 HTML

    HTML 转换为 x-jquery-tmpl,{{}} ,${} {{if}}具体语法请参见插件的示例文档,这些符号在Visual Studio 下有语法高亮

     1 <script id="productItemTmpl" type="text/x-jquery-tmpl">
     2         {{if quantity=== 0}}
     3         <div class="gshow-box gshow-box-disabel">
     4             {{else}}
     5             <div class="gshow-box">
     6                 {{/if}}
     7                 <div class="gshow-box">
     8                     {{if quantity === 0 }}
     9                     <div class="disabelPanel"></div>
    10                     {{/if}}
    11                     <a href="${productDetailUrl}" target="_blank">
    12                         <img class="gshow-box-img lazy" data-original="${productpic}" alt="${productname}">
    13                     </a>
    14                     <a class="g-title" href="${productDetailUrl}" target="_blank">${productname}</a>
    15                     <div class="clearfix">
    16                         <label class="fl">
    17 ${memberprice}
    18                             <span class="discount">${price}</span>
    19                         </label>
    20                         <span class="fr">
    21 <span class="color-red">${quantity}</span>件
    22                         </span>
    23                     </div>
    24                 </div>
    25     </script>

    2. 编写HTML

     1 <body>
     2     <div class="container">
     3         <h1>产品列表</h1>
     4         <hr />
     5         <div id="ProductContainer" class="qg-gshow-temp clearfix">
     6         </div>
     7     </div>
     8     <script src="jquery-1.7.2.js"></script>
     9     <script src="jquery.lazyload.js"></script>
    10     <script src="jquery.tmpl.js"></script>
    11     <script src="IAPP.js"></script>
    12 </body>

    3. JavaScript

     1 (function ($) {
     2     var IAPP = {};
     3 
     4     IAPP.ProductTmpl = 'ProductTmpl';
     5     IAPP.$ProductContainer = $('#ProductContainer');
     6 
     7     function setLazyloadImg() {
     8         /// <summary>
     9         /// 设置图片延迟加载
    10         /// </summary>
    11         $('img.lazy').lazyload({
    12             effect: 'fadeIn'
    13             , failure_limit: 10
    14             , threshold: 50
    15             , event: 'scroll'
    16         });
    17     }
    18 
    19     IAPP.loadDataByAjax = function (handler) {
    20         /// <summary>
    21         /// AJAX请求产品JSON数据
    22         /// </summary>
    23         /// <param name="handler">success回调处理函数</param>
    24         $.ajax({
    25             type: 'POST',
    26             url: 'url/getdata.ashx',
    27             data: { cmd: 'productlist' },
    28             dataType: 'json',
    29             success: handler,
    30             error: function () {
    31                 // error handler
    32                 console && console.info('error:some message');
    33                 // 当AJAX请求发生错误时,用模拟数据测试模板
    34                 handler(MockResponseFromServer);
    35             }
    36         });
    37     };
    38 
    39     IAPP.loadDataByAjaxHandler = function (result) {
    40         /// <summary>
    41         /// 回调函数
    42         /// </summary>
    43         /// <param name="result">response from server</param>
    44         var l = 0, // 用于保存产品的个数
    45          data, // 产品列表(Array)
    46          entityObj; // 用于保存产品实体对象
    47 
    48         if (!result) { throw 'no response from server'; }
    49 
    50         if (result.code && result.code === '1') {
    51             result.data && (data = result.data);
    52             if (data && data.length) {
    53                 l = data.length;
    54                 while (l--) {
    55                     entityObj = data.shift();
    56                     // 产品链接
    57                     entityObj['productDetailUrl'] = './product.aspx?pid=' + entityObj.productid;
    58 
    59                     $.tmpl(IAPP.ProductTmpl, entityObj).appendTo(IAPP.$ProductContainer);
    60                 }
    61 
    62                 setLazyloadImg(); // 延迟加载
    63             }
    64         } else {
    65             console && console.error(result.msg);
    66         }
    67     };
    68 
    69     ({
    70         initTmpl: function () {
    71             /// <summary>
    72             /// 初始化jQuery.tmpl
    73             /// </summary>
    74 
    75             // $.template(name/*模板名称*/,tmpl/*模板字符串*/)
    76             // 说明:使用此方式可以根据模板名访问模板以达到复用模板
    77             $.template(IAPP.ProductTmpl, $('#productItemTmpl').html());
    78         },
    79         initData: function () {
    80             /// <summary>
    81             /// 获取数据
    82             /// </summary>
    83             IAPP.loadDataByAjax(IAPP.loadDataByAjaxHandler);
    84         }, init: function () {
    85             /// <summary>
    86             /// 所有的初始化动作
    87             /// </summary>
    88             this.initTmpl();
    89             this.initData();
    90         }
    91     }).init();
    92 
    93 }(jQuery));
  • 相关阅读:
    mongodb搭建
    使用systemctl管理服务
    常用命令--find
    linux中的常用信号
    bash 中的特殊变量
    tomcat开启PID文件
    django基础入门
    Redis源码编译安装
    DRF路由组件
    Django/DRF序列化
  • 原文地址:https://www.cnblogs.com/January/p/4543558.html
Copyright © 2011-2022 走看看