前端模板artTemplate,handlerbars的使用心得

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

1,artTemplate

优点:

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

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

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

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

编写模板:

<tbody class="work-shift-list hide" id="workShiftListHIDE">
     <tr>      <td colspan="5">数据努力加载中..</td>    </tr>
</tbody>
<script type="text/html" id="workShiftListTpl">
	{{each data as value i}}
		<tr class="" role="row" data-tr={{value.uname}}>
			<td class="shift-name" data={{value.uid}}>{{value.uname}}</td>

			{{if value.startTime != null}}
				<td>{{value.startTime}} ~ {{value.endTime}}</td>
			{{else}}
            	         <td><p class="no-shift">暂无排班<p></td>
                 	{{/if}}

			{{if value.workShift != null}}
				<td>{{value.workShift.name}}</td>
			{{else}}
            	          <td></td>
         	     {{/if}}

			<td>{{value.place}}</td>
			<td class="center">{{value.remark}}</td>
		</tr>
	{{/each}}
</script>

渲染模板:

renderHtmlTemp.html(‘workShiftListHIDE‘, ‘workShiftListTpl‘,data);

注:data数据为JSON格式

自定义注册模板:

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

template.helper(‘$isNationalHolidays‘, function (otherLaw) {
                if (otherLaw == ‘1‘)
                    return = ‘是‘
                else
                    return = ‘否‘
            });
法定假日休息:{{$isNationalHolidays otherLaw}}

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

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

2,handlerbars

优点:

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

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

编写模板:

<section class="apply">
    <div class="ui-loading-wrap"></div>
</section>
<script id="list-apply" type="text/x-template">
    {{#if this}}
        {{#each this}}
            <div class="ui-row-flex  ui-arrowlink apply-list" applyId={{this.applyId}}>
                <div class="ui-col circle">
                    <div class="ui-avatar">
                        <span class="radius-type {{typeClass this.type}}">
                            <label>{{type this.type}}</label>
                        </span>
                    </div>
                    <h5>{{this.applySpan}}</h5>
                </div>
                <div class="ui-col ui-col-4">
                    <div class="ui-row"><span class="ui-txt-info">时间:</span><span class="ui-txt-highlight">{{cut this.applyDateTime}}<span></div>
                    <div class="ui-row"><span class="ui-txt-info">事由:</span><span>{{cut this.applyRemark}}</span></div>
                    <div class="ui-row">
                        <span class="apply-date"><h5 class="ui-txt-info">{{this.formatApplyDate}}申请</h5></span>
                        <span class="status {{statusClass this.status}}">{{status this.status}}</span>
                    </div>
                </div>
            </div>
        {{/each}}
    {{else}}
        <section class="ui-notice">
            <i></i>
            <p>暂无数据!</p>
        </section>
      {{/if}}
    </script>

渲染模板:

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

Helpers:

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

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

模板注释:

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

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

链接参考:

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

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

时间: 2024-10-01 03:22:41

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

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

var labelMap = { onlinePayment:{ label:"在线支付", desc:"支持大部分储蓄卡.信用卡及第三方平台支付", name:"", href:"" }, cashOnDelivery:{ label:"货到付款", desc:"货到付款只支持POS机刷卡支付,不支持现金支付", name:"", href:""

前端模板引擎arttemplate,后端模板引擎Nvelocity

It's my first blog 大家好,我叫曾岑,朋友们都叫我包子,今年21岁,湖北人,刚大学毕业,学的.net开发.去年一年,在南京工作了一年,那时候还没有拿到毕业证,找工作也是蛮难的,别人说没毕业证,也没经验,工资只能给个基础工资,不过还好,和几个朋友一起结伴去的,一起租的房子住的.在南京的工作经历就不说那么多了,至少让我看到了编程的这个世界. 今年7月份,辞掉了南京的工作,来到了深圳这个城市,重新开始找工作,运气还算不错,第二天就面试上了,第三天就正式上班了,工资待遇对于我这种新手来

前端模板引擎入门

模板引擎 模板引擎 起到 数据和视图分离的作用, 模板对应视图, 关注如何展示数据, 在模板外头准备的数据, 关注那些数据可以被展示. 后端模板引擎 freemarker 如下介绍,  java后台的模板引擎, freemark介绍,其图能很好标明这种关系. http://freemarker.org/ Apache FreeMarker is a template engine: a Java library to generate text output (HTML web pages, e

前端模板Juicer

Juicer 是一个高效.轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC). 除此之外,它还可以在 Node.js 环境中运行. 用过别的前端模板也有不错的, 比如jsrender等,但比较困扰人的一个问题就是:前端模板的定界符和后端模板冲突,造成很多麻烦,比如很多都喜欢用{{}}或{%%}做定界符. Juicer一个特点就是自定义模板语法边界符,下边是 Juicer 默认的边界符.你可以借此解决 Juicer 模板语法同某些后

Yii框架学习笔记(二)将html前端模板整合到框架中

选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/topics/390807796 更多内容 百度:yii 前端 http://my.oschina.net/u/1472492/blog/221085 摘要 Yii框架学习笔记(二)将html前端模板整合到框架中 原文地址:http://www.ldsun.com/1309.html 上一节成功将Y

【超精简JS模版库/前端模板库】原理简析 和 XSS防范

使用jsp.php.asp或者后来的struts等等的朋友,不一定知道什么是模版,但一定很清楚这样的开发方式: <div class="m-carousel"> <div class="m-carousel-wrap" id="bannerContainer"> </div> </div> <ul class="catelist onepx" onepxset="

【大前端之前后分离02】前端模板嵌套问题

回顾 接上文:[大前端之前后分离01]JS前端渲染VS服务器端渲染,我们探讨了为什么要做前后分离,以及前端渲染需要解决的问题,最后提出了自己的解决方案: 前端代码编译形成两套代码:①前端发布版本 + ②服务器端脚本 这个想法借鉴了fis plus的smarty模块化思维,以及reactJS编译运行的概念,上次初步论证了其可行性,也遗留了一些问题,其中比较关键的问题是: 前端模块嵌套问题 我们在一个模板中又有一个widget,在子模板中又有一个widget,父模块与子模块中有数据依赖,或者子模块为

前端模板与渲染方式

1 页面级的渲染 再刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串.浏览器对其进行渲染.html中可能会混有一些php(或者php中混有一些html).在服务端将数据与模板进行拼装,生成要返回浏览器端的html串. 这与我们现在做一个普通网页没什么区别.只不过现在,我们更常使用模板技术来解决前后端耦合的问题. 前端使用模板引擎,在html中写一些标签,与数据与逻辑基本无关.后端在渲染的时候,解析这些标签,生成HTML串,如smarty.其实前端与

在 FIS 中,集成了百度前端模板

有好久没有写博客了,大概是因为工作太忙,加上要不断地学习,所以忘记了... 进入正题... fis内置了百度前端模板baiduTempate,在编译过程中,会预编译生成对应文件,不需要线上编译,提高页面运行效率.所谓的预编译,开始我也是比较模糊,所以问了一些前端同事再加上自己工作体会便明白了,这里我写下个人的理解,若有不妥之处,还请大家多多指点. 使用fis构建工具时,在 JS 代码中,通过 __inline 方式进行编译处理前端模板.同时规定以 tmpl 为后缀的文件为前端模板,使用方式: /