版权所有,转载请注明出处: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. RMAN备份之非归档模式下的备份

    Backing Up a Database in NOARCHIVELOG Mode:1.Log into RMAN2.Shutdown immediate from RMAN3.Startup mo ...

  2. ORACLE AWR概述及生成AWR报告

    1.Overview of the Automatic Workload Repository The Automatic Workload Repository (AWR) collects, pr ...

  3. JAVA Socket无参构造方法的使用

    1.Socket类的构造方法很多,只有无参构造方法不会尝试建立连接,其他构造方法,都会尝试建立连接的,如果建立连接失败,将会抛出异常.如果想为Socket设定连接超时时间,此时就需要使用无参构造方法, ...

  4. javascript设计模式——Module

    Module模式是提供公有和私有方法的代码块,有利于封装组织代码,可减少变量及函数名与其它模块的冲突. 推荐阅读: http://www.adequatelygood.com/JavaScript-M ...

  5. ASP.NET怎么防止多次点击提交按钮重复提交

    今天做一个系统,由于服务器有点慢,所以常会被点击两次或三次,提交的数据就是多次了.所以要让按钮点击后,不能再次点击. 对于一个按钮,要让变成恢色的,只要this.disabled=true就可以了,可 ...

  6. Java内部类总结

    内部类是一种编译器现象,与虚拟机无关.编译器将会把内部类翻译成用美元符号$分隔外部类名与内部类名的常规类文件,而虚拟机对此一无所知.编译器为了引用外部类,生成了一个附加的实例域this$0 为什么要用 ...

  7. SPL的基本使用

    SPL是Standard PHP Library(PHP标准库)的缩写. 根据官方定义,它是"a collection of interfaces and classes that are ...

  8. ajax接收遍历处理json格式数据

    ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...

  9. 解决Button在IE6、7下的自适应宽度问题

    很早就遇到过这么个小问题,但由于其并未影响到实际作用和美观就没有正面解决它,现在,我们来试着解决它. 写一个Button,有两种方式:其一,直接button标签:其二,input type=”butt ...

  10. 关于Webapp导航设计的思考

    一.马蜂窝 http://m.mafengwo.com