轻量级模板引擎ArtTemplate

这星期做了一个数据统计系统,基于需求便使用了一个模板引擎来渲染数据.
在这里模板引擎同后端的不太一样,主要是前端在开发过程中,对于数据处理之后插入到html的过程中使用到的工具.

由于系统是迷你型的,在一通搜索之后便决定采用ArtTemplate.

ArtTemplate具有如下特点

  1. 轻量级(不到3kb)

  2. 快速上手,用法简单

  3. 处理速度快

常见的模板引擎还有handlebar,Mustache,jade等,我只试用过handlebar,个人感觉它太过于沉重,配置起来繁琐,并不适合小项目的数据渲染.

artTemplate提供了两种语法选择,原生语法和简洁语法

简洁语法

{{if admin}}    {{include 'admin_content'}}    {{each list}}        {{$index}}. {{$value.user}}    {{/each}}{{/if}}

原生语法

        . 

模板引擎的原理是基于正则表达式,对字符串进行分析处理.
在两种语法中,简介语法易读性更好,用起来比较顺手,比原生语法只多了几k而已,推荐实用简洁语法

基本的用法不在此介绍,官网的链接写的很详细.主要语法如下.

var template = require('art-template');var data = {list: ["aui", "test"]};var html = template(__dirname + '/index/main', data);

最后贴一个好用的功能------过滤器
在arttemplate中定义为helper,也就是辅助器.这种工具我之前在写angular也使用到过,我觉得像ng中命名为过滤器更适合.它本意就是一个数据的过滤器,在过滤器中定义一些方法,使得渲染到页面的数据是你所需要的.

有点抽象,先贴一个官方的demo,是一个日期的过滤器.

# 辅助方法{{time | dateFormat:'yyyy年 MM月 dd日 hh:mm:ss'}}/   * 对日期进行格式化,  * @param date 要格式化的日期  * @param format 进行格式化的模式字符串 *     支持的模式字母有:  *     y:年,  *     M:年中的月份(1-12),  *     d:月份中的天(1-31),  *     h:小时(0-23),  *     m:分(0-59),  *     s:秒(0-59),  *     S:毫秒(0-999), *     q:季度(1-4) * @return String * @author yanis.wang * @see    http://yaniswang.com/frontend/2013/02/16/dateformat-performance/ */template.helper('dateFormat', function (date, format) {    if (typeof date === "string") {        var mts = date.match(/(\/Date\((\d+)\)\/)/);        if (mts && mts.length >= 3) {            date = parseInt(mts[2]);        }    }    date = new Date(date);    if (!date || date.toUTCString() == "Invalid Date") {        return "";    }    var map = {        "M": date.getMonth() + 1, //月份         "d": date.getDate(), //日         "h": date.getHours(), //小时         "m": date.getMinutes(), //分         "s": date.getSeconds(), //秒         "q": Math.floor((date.getMonth() + 3) / 3), //季度         "S": date.getMilliseconds() //毫秒     };    format = format.replace(/([yMdhmsqS])+/g, function(all, t){        var v = map[t];        if(v !== undefined){            if(all.length > 1){                v = '0' + v;                v = v.substr(v.length-2);            }            return v;        }        else if(t === 'y'){            return (date.getFullYear() + '').substr(4 - all.length);        }        return all;    });    return format;});// --------var data = {    time: 1408536771253,};var html = template('test', data);document.getElementById('content').innerHTML = html;

上面的例子是完整的一个日期过滤器的例子,有需要直接复制使用即可.我自己在项目中是用到的是比较简单一点的,一个根据数据显示的不同输出对应的数据.
核心代码如下

    template.helper('typeFilter', function (type) {    if (typeof type === "string") {        switch(type){            case "init":{                return "进入页面";                break;            }            ...            case "share1":{                return "分享到朋友圈";                break;            }        }    }});

就是一个简单的数据转换器,后面针对所有的对应关系将其写成了一个对象,再进行过滤

var typeOpt = {    "init": "进入页面",    ...    "share1": "分享到朋友圈"}template.helper('typeFilter', function (type) {    if (typeof type === "string") {        for(let i in typeOpt ){            if(type == i){                return typeOpt[i];            }        }    }以上是helper的内容最后arttemplate还有一个include的功能,类似php的include函数,不多介绍.

关键字:JavaScript

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部