版权所有,转载请注明出处:http://guangboo.org/2014/01/05/filter-surgejs-template-engine

过滤器在surge.js模板引擎中多处用到,其类似于javascript的函数,只是在surge.js模板引擎中使用的语法稍有不同,surge.js模板引擎会将过滤器解析成javascript的函数,并且这个函数至少要有一个参数,该参数就是要“过滤”的数据,其他参数则是“过滤”时所需要的参数。

语法

surge.js模板引擎的过滤器的语法,如下:

data|filter_name:arg1, arg2

data为要“过滤”的数据

filter_name为过滤器名称,其实就是预定义的javascript函数

arg1, arg2为“过滤”数据时所需要的参数。

示例中的代码在surge.js模板引擎解析时,将被解析成如下javascript代码:

_.filter_name(data, arg1, arg2)

其中“_”是存储过滤器的“容器”,surge.js模板引擎内置的过滤器和用户自定义的过滤器都存储在这里。

使用范围

过滤器在surge.js模板引擎中多处使用,既可以在数据输出时使用,如:

{{ value|truncate:20 }}

也可以在流程控制块中对数据处理,如:

{% if value|length > 100 %}
<!-- html code -->
{% elif value|length > 10 %}
<!-- html code -->
{% endif %}

或者

{% with len = value|length %}
{% if len > 100 %}
<!-- html code -->
{% elif len > 10 %}
<!-- html code -->
{% endif %}
{% endwith %}

或者:

{% for item in value|sort:"name" %}
html code
{% endfor %}

嵌套

目前surge.js模板引擎支持过滤器的嵌套,例如:

{{ post.title|truncate:20|title }}

示例中的例子是将post.title的值,截取20个字符,然后再将截取后的数据已标题格式输出,surge.js模板引擎将其解析成javascript代码,如下:

_.title(_.truncate(post.title, 20))

限制

surge.js模板引擎允许将变量作为过滤器的参数,如:

{{ post.title|truncate:post.titlesize }}

但是,如果你想使过滤器的参数也能使用过滤器的话,将不会得到你想要的结果,因为这会产生歧义,如:

{{ post.title|truncate:post.titlesize|add:10 }}

也许你的本意是:

_.truncate(post.title, _.add(post.titlesize, 10))

但是实际的效果却是:

_.add(_.truncate(post.title, post.titlesize), 10)

也许你觉得添加括号也许能解决问题,如:

{{ post.title|truncate:(post.titlesize|add:10) }}

只可惜目前surge.js模板引擎还不支持这样的语法,不过之后的版本也许会支持。

自定义过滤器

surge.js模板引擎内置提供了一些常用的过滤器,同时还支持用户自定义过滤器,要了解内置的过滤器,可以查看其文档:http://guangboo.github.io/surge.js/tutorial.html#builtinfilters。surge.js模板引擎的过滤器实际就是javascript函数,该函数只是需要一个参数,只有您会编写javascript函数,您就能自定义surge.js模板引擎的过滤器,surge.js模板引擎提供了注册自定义过滤器的接口:

surge.register(name, function)

如下注册一个自己的过滤器示例:

surge.register('sum', function(a) {
var s = 0;
for(var i = 0; i < a.length; i++) {
s += a[i];
}
return s;
}).register('arg', function(a) {
return surge.__builtins.sum(a) / a.length;
});

总结

过滤器是surge.js模板引擎中非常重要的功能,在数据输出、数据格式化、数据预处理等方面起到相当大的作用,并且允许用户自定义过滤器,且过滤器的定义如同编写javascript函数一样简单,这为surge.js模板引擎的过滤器提供了更强大的扩展支持。

Filter - Surge.js模板引擎过滤器的更多相关文章

  1. doT js 模板引擎【初探】要优雅不要污

    js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...

  2. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  3. JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用

    最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...

  4. 掌握js模板引擎

    最近要做一个小项目,不管是使用angularjs还是reactjs,都觉得大材小用了.其实我可能只需要引入一个jquery,但想到jquery对dom的操作,对于早已习惯了双向绑定模式的我,何尝不是一 ...

  5. js模板引擎

    js模板引擎包括如下: template 官方参考:http://aui.github.io/artTemplate BaiduTemplate 官方参考:http://baidufe.github. ...

  6. 调研js模板引擎

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  7. js模板引擎介绍搜集

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  8. js模板引擎--artTemplate

    js模板引擎--artTemplate 以前研究过一段时间的handlebars,但因为其渲染性能略逊于腾讯的artTemplate(在artTemplate的GitHub官网上有推荐的性能测试地址) ...

  9. JS模板引擎:tppl

    全球最快的JS模板引擎:tppl 废话不多说,先上测试: 亲测请访问:[在线测试地址]单次结果不一定准确,请多测几次. tppl 的编译渲染速度是著名的 jQuery 作者 John Resig 开发 ...

随机推荐

  1. javascript之函数节流

    对于高频率的事件触发,为了优化页面性能,我们一般会对其做函数节流.比如: resize.keydow.scroll事件等.用户的频繁操作,会导致事件高频率的执行,这样会出现页面抖动啊.频繁调接口啊等问 ...

  2. node.js querystring处理参数

    C:\Documents and Settings\Administrator\WebstormProjects\untitled6>node> url{ parse: [Function ...

  3. VS单元测试入门实践教程

    摘要:本教程不会介绍单元测试的基本理论知识,也不会和大家讨论在实际项目中是否需要写单元测试代码的问题.但是如果你此时想使用VS中的单元测试的工具来测试某个方法是否正确,可你又从来没真正实践过,那么本教 ...

  4. MAVEN项目,Eclipse启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    由于是maven项目,tomcat在发布项目的时候没有同时发布maven依赖所添加的jar包,所以报此错误: 解决办法: 项目右键 —> 属性 -> Deployment Assembly ...

  5. 利用java生成带有干扰线的网页验证码图片

    package imageCreate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import j ...

  6. 使用 Struts2 校验器校验用户注册信息

    基于验证框架的输入校验 一.创建一个struts2项目testValidators.Struts2 初体验:http://www.cnblogs.com/likailan/p/3280820.html ...

  7. Kurskal算法(克鲁斯卡尔算法)

    特点:适用于稀疏图,边比较少的图.如果顶点较少,且为稠密图,则用Prim算法.跟Prim算法的用途相同.时间复杂度为O(e*loge),其中e为边数. 代码: #include <stdio.h ...

  8. 1.offsetParent,offsetLeft,offsetTop

    offsetParent <!doctype html> <html> <head> <meta charset="utf-8"> ...

  9. PS切图保存后的背景图为透明

    1.若想PS切图保存后的背景图为透明,那么则需要在如下图中所示的修改即可,切图后[文件]——>[存储为web格式]——>[PNG-24]: 2.要想在css中的背景图片为相通,则先剪切一个 ...

  10. web前端开发常用工具

    http://www.gbin1.com/technology/javautilities/20120806-resource-for-front-end-developer/ 冒泡样式 http:/ ...