当前位置: 首页 > 工具软件 > jsrender > 使用案例 >

jsrender简单封装

储俊英
2023-12-01

一个JavaScript库,允许您定义一次样板结构并重复使用它来动态生成HTML。JsRender为HTML5开发带来了一个新的模板库,它具有无代码标记语法和高性能,不依赖于jQuery,也不依赖于文档对象模型(DOM),支持创建自定义函数并使用纯粹的基于字符串的渲染。

如下为自己封装的JsRender模板语法
首先在页面引入jsrender.min.js

方法一:

 useTemplate: function (templateId, elementId, data, helpersOrContext,noIteration) {
            var template = templateMap[templateId]
            if (!template) {
                template = jsrender.templates(htmlDecode($("#" + templateId).html()));
                templateMap[templateId] = template
                $("#" + templateId).outerHTML = "";
            }
            var htmlOutput = template.render(data, $.extend(templateHOC,helpersOrContext),   noIteration);
            //$("#" + elementId).html(htmlOutput);
            $("#" + elementId)[0].innerHTML = htmlOutput;
        }

方法二:

        useTemplateAuto: function (elementId, data, helpersOrContext, noIteration) {
            var arr = templateMap[elementId], template, targetElement;
            if (arr) {
                template = arr[0];
                targetElement = arr[1];
            } else {
                var element = $("#" + elementId)
                template = jsrender.templates(htmlDecode(element.html()));
                targetElement = element.parent();
                templateMap[elementId] = [template, targetElement]
            }
            var htmlOutput = template.render(data, $.extend(templateHOC, helpersOrContext), noIteration);
            targetElement.html(htmlOutput);
            //targetElement[0].innerHTML = htmlOutput;
        }

方法三:

        useTemplateAll: function (data, helpersOrContext, noIteration) {
            //var elements = $('script[type="text/x-jsrender"]')
            var elements = $('script[type="text/html"]')
            for (var i = 0; i < elements.length; i++) {
                var template = jsrender.templates(htmlDecode(elements[i].innerHTML));
                var htmlOutput = template.render(data, $.extend(templateHOC, helpersOrContext), noIteration);
                elements[i].outerHTML = htmlOutput;
            }
        }
        htmlDecode: function (str) {
            return str.replace(
                /&(lt|gt|nbsp|amp|quot);/ig,
                function (all, t) {
                    return htmlDecodeMap[t];
                }
            );
        },

使用方法如下:

  <script id='indexPageDynamicNewsData' type="text/html">
      <li class="flex-between">
          <p>
             <span class="title" data-id='{{:#data["id"]}}' title="{{:#data['title']}}">{{:#data['title']}}
              </span>
              <i style="{{:~getImg(#data,#index)}}" ></i>
          </p>
          <span class="date">{{:#data['updateTime']}}
          </span>
       </li>
</script>


       core.useTemplateAuto('indexPageDynamicNewsData', res, {
            getImg: function (data, index) {
                            // 判断时间
             var startDate = data.updateTime,
                 endDate = new Date(),
                 startD = new Date(Date.parse(startDate.replace(/-/g, "/"))),
                days = parseInt((endDate.getTime() - startD.getTime()) / (1000 * 60 * 60 * 24));
              if (days < 30) {
                   return 'display: inline-block;';
              } else {
                  return 'display: none;'
              }
            },
        })
//'indexPageDynamicNewsData'为scriptid id,res为异步获取的数据,getImg为script中使用到的方法,可传递两个参数,项和索引,方法可以有多个 script中{{:#data}}为数据的一项。
 类似资料: