写前端页面肯定离不开模板渲染,就近期项目中用的两个前端模板做一些使用总结,顺便复习一下,也方便后面温故。

1,artTemplate

优点:

1,一般web端用得较多,执行速度通常是 Mustache 与 tmpl 的 20 多倍,支持运行时调试,可精确定位异常模板所在语句

2,安全,默认对输出进行转义、在沙箱中运行编译后的代码

3,支持include语句,可在浏览器端实现按路径加载模板

4,支持预编译,可将模板转换成为非常精简的 js 文件

编写模板:

  1. <tbody class="work-shift-list hide" id="workShiftListHIDE">
  2. <tr>
          <td colspan="5">数据努力加载中..</td>
       </tr>
  3. </tbody>
  1. <script type="text/html" id="workShiftListTpl">
  2. {{each data as value i}}
  3. <tr class="" role="row" data-tr={{value.uname}}>
  4. <td class="shift-name" data={{value.uid}}>{{value.uname}}</td>
  5.  
  6. {{if value.startTime != null}}
  7. <td>{{value.startTime}} ~ {{value.endTime}}</td>
  8. {{else}}
  9.          <td><p class="no-shift">暂无排班<p></td>
  10.          {{/if}}
  11.  
  12. {{if value.workShift != null}}
  13. <td>{{value.workShift.name}}</td>
  14. {{else}}
  15.          <td></td>
  16.      {{/if}}
  17.  
  18. <td>{{value.place}}</td>
  19. <td class="center">{{value.remark}}</td>
  20. </tr>
  21. {{/each}}
  22. </script>

渲染模板:

  1. renderHtmlTemp.html('workShiftListHIDE', 'workShiftListTpl',data);

注:data数据为JSON格式

自定义注册模板:

当有特定的场景需要对数据进行相关的转换时,我们可以通过自定义模板函数来实现,如果是否为法定节日用1,0表示,但是页面要显示‘是’,‘否’。自定义模板如下:

  1. template.helper('$isNationalHolidays', function (otherLaw) {
  2. if (otherLaw == '1')
  3. return = '是'
  4. else
  5. return = '否'
  6. });
  1. 法定假日休息:{{$isNationalHolidays otherLaw}}

也可以返回html代码,用来实现相应的权限过滤,如:

  1. //注册模板,系统管理员可以删除通过的排班
  2. helperARTTemplate: function(){
  3. template.helper('$isAdmin', function (scheduleId, templateId) {
  4. var rs;
  5. if (user.orgId == 1) {
  6. rs = '<a href="javascript:;" class="btn-icon btn-icon-del" onclick="schedulingClass.publicHandleTools.del('+ scheduleId +','+ templateId +')" title="删除"><i></i></a>'
  7. }
  8. return rs;
  9. });
  10. },
  1. {{$isAdmin value.scheduleId,value.templateId}}

2,handlerbars

优点:

1,轻量级,一般用于移动端h5应用的开发,官方是说Handlebars 为你提供了一个可以毫无挫折感的高效率书写 语义化的模板 所必需的一切。

2,Mustache 模板和 Handlebars 是兼容的,所以你可以把Mustache模板拿来导入到Handlebars中,并开始使用Handlebars所提供的更丰富的功能。

编写模板:

  1. <section class="apply">
  2. <div class="ui-loading-wrap"></div>
  3. </section>
  1. <script id="list-apply" type="text/x-template">
  2. {{#if this}}
  3. {{#each this}}
  4. <div class="ui-row-flex ui-arrowlink apply-list" applyId={{this.applyId}}>
  5. <div class="ui-col circle">
  6. <div class="ui-avatar">
  7. <span class="radius-type {{typeClass this.type}}">
  8. <label>{{type this.type}}</label>
  9. </span>
  10. </div>
  11. <h5>{{this.applySpan}}</h5>
  12. </div>
  13. <div class="ui-col ui-col-4">
  14. <div class="ui-row"><span class="ui-txt-info">时间:</span><span class="ui-txt-highlight">{{cut this.applyDateTime}}<span></div>
  15. <div class="ui-row"><span class="ui-txt-info">事由:</span><span>{{cut this.applyRemark}}</span></div>
  16. <div class="ui-row">
  17. <span class="apply-date"><h5 class="ui-txt-info">{{this.formatApplyDate}}申请</h5></span>
  18. <span class="status {{statusClass this.status}}">{{status this.status}}</span>
  19. </div>
  20. </div>
  21. </div>
  22. {{/each}}
  23. {{else}}
  24. <section class="ui-notice">
  25. <i></i>
  26. <p>暂无数据!</p>
  27. </section>
  28. {{/if}}
  29. </script>

渲染模板:

  1. var tabTemplate = Handlebars.compile($('#list-apply').html());
  2. $('.apply').html(tabTemplate(data));

Helpers:

类似与artTemplate注册自定义模板,Handlebars 的 helpers 在模板中可以访问任何的上下文。当内置的helpers不满足需求时,我们可以通过 Handlebars.registerHelper 方法注册一个 helper。

  1. //自定义handlebars helper 申请状态,1待审核,2已通过,3被驳回
  2. Handlebars.registerHelper('status', function(value, options) {
  3. if(value == 1)
  4. return '待审核';
  5. else if(value == 2)
  6. return '已通过';
  7. else if(value == 3)
  8. return '被驳回';
  9. });
  1. <div class="ui-row">
  2. <span class="apply-date"><h5 class="ui-txt-info">{{this.formatApplyDate}}申请</h5></span>
  3. <span class="status {{statusClass this.status}}">{{status this.status}}</span>
  4. </div>

模板注释:

跟在代码中写注释一样,注释是不会最终输出到返回结果中的。所有注释都必须有 }},一些多行注释可以使用 {{!-- --}} 语法。

  1. <div class="entry">
  2. {{! This comment will not be in the output }}
  3. <!-- This comment will be in the output -->
  4. </div>

链接参考:

1.http://aui.github.io/artTemplate/

2.https://segmentfault.com/a/1190000000342636?from=androidqq#articleHeader2

前端模板artTemplate,handlerbars的使用心得的更多相关文章

  1. 前端模板 artTemplate之辅助方法template.helper

    var labelMap = { onlinePayment:{ label:"在线支付", desc:"支持大部分储蓄卡.信用卡及第三方平台支付", name ...

  2. 前端模板文件化jQuery插件 $.loadTemplates

    工作中使用前端模板引擎,如 artTemplate.jsRender,来替代拼接字符串. 可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题. 所以将多个 ...

  3. artTemplate-优秀的前端模板引擎

    artTemplate-优秀的前端模板引擎 1.html中引入artTemplate的js文件: <script type="text/javascript" src=&qu ...

  4. 前端模板<script type="text/template" id="tmpl">

    前端模板, 比连接字符串好用多了, 还可以使用循环\判断等语句, 减少工作量 <script type="text/template" id="member-tmp ...

  5. SS - DIY一个前端模板引擎.(一)

    前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码. 个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离. 为了理解模板引 ...

  6. 前端模板Juicer

    Juicer 是一个高效.轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC). 除此之外,它还可以在 Node.js 环境中运行. 用 ...

  7. DIY一个前端模板引擎.(一)

    前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码.个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离.为了理解模板引擎原 ...

  8. Mustache.js前端模板引擎源码解读

    mustache是一个很轻的前端模板引擎,因为之前接手的项目用了这个模板引擎,自己就也继续用了一会觉得还不错,最近项目相对没那么忙,于是就抽了点时间看了一下这个的源码.源码很少,也就只有六百多行,所以 ...

  9. JST(JavaScript Trimpath)前端模板引擎简介

    JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...

随机推荐

  1. JSON字符串转JavaBean,net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ……

    在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名.年龄等 public class Student implements java.io.Serializab ...

  2. Python 命名空间

    通俗的来说,Python中所谓的命名空间可以理解为一个容器.在这个容器中可以装许多标识符.不同容器中的同名的标识符是不会相互冲突的.理解python的命名空间需要掌握三条规则: 第一,赋值(包括显式赋 ...

  3. 7.3---直线是否相交(CC150)

    注意:就算斜率相等,但是,如果截距也相等,那么是属于相交,所以要特殊判断. public class CrossLine { public boolean checkCrossLine(double ...

  4. Junit 测试 Spring

    在测试类上加上@RunWith,和@ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration ...

  5. Js 的 this 是什么

    this指的是调用函数的那个对象,谁调用函数,谁就是this 更多: http://www.cnblogs.com/justany/archive/2012/11/01/the_keyword_thi ...

  6. C语言宏定义时#(井号)和##(双井号)的用法

    C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...

  7. 【Networking】Thrift and gRPC

    参考资料: http://doc.oschina.net/grpc?t=60138 http://www.grpc.io/ https://thrift.apache.org/ https://git ...

  8. javascript特殊运算符

    in运算符                 in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数十一个对象或数组.如果该 运算符左边的值是右边对象的一个属性名,则返回true, ...

  9. SQL Server日期和时间的格式

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  10. CXGrid的使用技巧

    CXGrid的使用技巧 ========================================================================== 在主从TableView中 ...