前端模板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
前端模板artTemplate,handlerbars的使用心得的更多相关文章
- 前端模板 artTemplate之辅助方法template.helper
var labelMap = { onlinePayment:{ label:"在线支付", desc:"支持大部分储蓄卡.信用卡及第三方平台支付", name ...
- 前端模板文件化jQuery插件 $.loadTemplates
工作中使用前端模板引擎,如 artTemplate.jsRender,来替代拼接字符串. 可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题. 所以将多个 ...
- artTemplate-优秀的前端模板引擎
artTemplate-优秀的前端模板引擎 1.html中引入artTemplate的js文件: <script type="text/javascript" src=&qu ...
- 前端模板<script type="text/template" id="tmpl">
前端模板, 比连接字符串好用多了, 还可以使用循环\判断等语句, 减少工作量 <script type="text/template" id="member-tmp ...
- SS - DIY一个前端模板引擎.(一)
前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码. 个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离. 为了理解模板引 ...
- 前端模板Juicer
Juicer 是一个高效.轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC). 除此之外,它还可以在 Node.js 环境中运行. 用 ...
- DIY一个前端模板引擎.(一)
前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码.个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离.为了理解模板引擎原 ...
- Mustache.js前端模板引擎源码解读
mustache是一个很轻的前端模板引擎,因为之前接手的项目用了这个模板引擎,自己就也继续用了一会觉得还不错,最近项目相对没那么忙,于是就抽了点时间看了一下这个的源码.源码很少,也就只有六百多行,所以 ...
- JST(JavaScript Trimpath)前端模板引擎简介
JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...
随机推荐
- Android学习笔记(八)——四种基本布局
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...
- 一起入门python5之for循环
昨天中午本来写了的,结果手贱了一下ctrl+x以后又去复制了别的东西.结果所有写的都没有了.蛋疼.继续写吧.今天来说for循环即条件判断>>> age = 20 #首先 ...
- PHP输出控制(Output Control)函数
ob_start 此函数将打开输出缓冲.当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中. 内部缓冲区的内容可以用 ob_get_contents() ...
- 在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
Phpstorm除了能直接打开localhost文件之外,还可以连接FTP,除了完成正常的数据传递任务之外,还可以进行本地文件与服务端文件的异同比较,同一文件自动匹配目录上传,下载,这些功能是平常ID ...
- 【GoLang】50 个 Go 开发者常犯的错误
1. { 换行: Opening Brace Can't Be Placed on a Separate Line 2. 定义未使用的变量: Unused Variables 2. import ...
- MVC Create
本文介绍如何在MVC里往数据库中插入新的记录. 这里用到的数据表如下: Employees Step 1: 在Control文件里加入method public ActionResult Create ...
- 全局对象的构造函数会在main 函数之前执行
#include <iostream> using namespace std; class A { public: A() { cout << "Generator ...
- python virtualenv环境运行django
python virtualenv环境运行django 安装前准备 检查pip版本与python版本是否一致 [root@localhost bin]# whereis pip pip: /usr/b ...
- centos7删除已经安装的docker
centos下可以使用yum来删除docker. 列出docker包的具体的名字. $ yum list installed | grep docker docker-engine.x86_64 -0 ...
- Thread.Sleep in WinRT
Thread.Sleep in WinRT static void Sleep(int ms) { new System.Threading.ManualResetEvent(false).Wa ...