Tinyliquid JavaScript Liquid模板引擎开源项目

我要开发同款
匿名用户2013年02月19日
127阅读
开发技术JavaScript
所属分类程序开发、模板引擎
授权协议MIT

作品详情

TinyLiquid是一个基于JavaScript,兼容Liquid模板语法的的模板引擎。其具有以下特点:

支持异步本地和异步过滤器

轻松添加自定义标签和自定义过滤器

几乎完全支持液体语法

支持Express3.x框架

高测试覆盖率(92%覆盖率)

下载&安装

目前最新版为v0.0.9,可通过以下方式来获取TinyLiquid模块:

通过NPM安装:npminstalltinyliquid

通过git下载:gitclonegit://github.com/leizongmin/tinyliquid.git

在浏览器端使用:

在Express3.x中使用:模块express-liquid

Liquid模板语法

Liquid是一个比较优秀的轻量级的模版语言。详见:Liquid官网

基础

Liquid有两种形式的标签,即输出标签和逻辑标签。这两种标签的区别在于:

输出标签:用于处理模版输出值,使用{{}}包围,如下:{{product.title}}

逻辑标签:用于处理模版逻辑,使用{%%}包围,如下:{%ifproduct.price>100%}

输出标签

如下面例子:你好{{name}}你好{{user.name}}你好{{'shopqi'}}

过滤器

输出标签的内容可以通过过滤器来进行格式化操作。例如,我们将‘shop’的转化成大写输出,可使用如下形式的标签{{'shop'|upcase}}

逻辑标签

逻辑标签用于处理模版中的逻辑关系,ShopQi支持如下标签

if/else/unless

用于判断条件,参数为boolean值:

{%ifuser%}Hi{{user.name}}{%endif%}{%ifuser.name=='tobi'%}hitobi{%endif%}{%ifuser.name!='tobi'%}hinon-tobi{%endif%}{%unlessuser.name=='tobi'%}hinon-tobi{%endunless%}{%ifuser.name=='tobi'oruser.name=='marc'%}himarcortobi{%endif%}{%ifuser.name=='tobi'anduser.last_name=='scottish'%}hitobiscottish{%endif%}{%ifuser.namecontains'tobi'%}hitobias{%endif%}{%ifuser.creditcard==nil%}poorsob{%endif%}{%ifuser.payments==empty%}youhaven'tpaidyet!{%endif%}{%ifuser.age>18%}Loginhere{%else%}Sorry,youaretooyoung{%endif%}{%unlessuser.age>18%}Sorry,youaretooyoung{%else%}Loginhere{%endunless%}

case语句块

如果一个情况存在多个分支的情况,可使用case来处理:

{%casecondition%}{%when1%}hit1{%when2%}hit2{%else%}hitelse{%endcase%}

cycle标签

通常情况下,我们有时候需要循环交替的执行某些任务。Liquid支持这种周期性的执行任务的标签,如下:

{%cycle'one','two','three'%}{%cycle'one','two','three'%}{%cycle'one','two','three'%}{%cycle'one','two','three'%}结果为:onetwothreeone

如果,我们使用

for标签

liquid支持集合数据循环,如:

{%foritemincollection%}{{item}}{%endfor%}

同样还支持如下一些辅助方法:forloop.length#=>整个循环的总次数forloop.index#=>当前循环的下标forloop.index0#=>当前循环的下标(从0开始算)forloop.rindex#=>计算还剩下多少次数未执行forloop.rindex0#=>计算还剩下多少次数未执行(从0开始计算)forloop.first#=>是否是集合的第一次循环forloop.last#=>是否是集合的最后一次循环

for循环还支持一些属性limit,offset,其中,limit用于限制集合循环次数,offset用于设置开始的下标,如:

#array=[1,2,3,4,5,6]{%foriteminarraylimit:2offset:2%}{{item}}{%endfor%}#resultsin3,4同样,for里面还支持范围的定义,即..用来取得范围,如:#ifitem.quantityis4...{%foriin(1..item.quantity)%}{{i}}{%endfor%}#resultsin1,2,3,4

Tables

Liquid同样支持创建表格,创建行和列

{%tablerowiteminitemscols:3limit:12%}{{item.variable}}{%endtablerow%}

变量赋值assign

当我们需要为变量赋值时,我们可以使用assign来进行定义我们需要的变量:

{%assignname='freestyle'%}{%fortincollections.tags%}{%ift==name%}

Freestyle!

{%endif%}{%endfor%}

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论