mmTemplate
我的前后端通用模板,既可以自动变成jQuery插件,也可以单独为一个前端模板,亦可以是独立的node.js模板
前端默认是使用<& &>做定界符
后端默认是使用<% %>做定界符 过滤器的使用,它只能出现<%= <&这样的左定界符内,操作对象是字符串,数组等, 我们在它后面跟一个“|”当分隔符,后面跟过滤器的名字。 过滤器都定义在ejs.filters之内,现在已赠送escape,unescape这两个处理字符串的过滤器,相实就我是我的lang模块的 $.String.escapeHTML与$.String.unescapeHTML。<&= "<aaaa>" | escape &>视图helper的使用,它相当于一种独立的函数,但它通常由框架提供的与action紧密相连的辅助方法。目的是将大量的业务代码移出模板,实现重用。它会在编译时一起写进模板中 如
var set_link = function(text, url){ return '<a href="'+url+'">'+text +'</a>'; } var fn = ejs.compile(source, { helpers:{ set_link: set_link } })那么我们就可以直接在模板中使用此方法
<&= set_link("rubylouvre","http://www.cnblogs.com/rubylouvre/") %>;
"-"操作符的使用
见下面模板
<%- for(var i=0, tl = @trs.length, tr; i < tl; i++){ -%> <- tr = @trs[i] -> <tr> <td><%= tr.name %></td><td><%= tr.sex %></td><td><%= tr.date %></td> </tr> <%- } -%>
如果不使用-操作符,那么生成的HTML会在原<% %>之间的地方出现大块的空白,用了它就会削掉它们,保证HTML的干净,这是从rails的ERB模块引入的语法.
模板的编译函数的缓存
在前端我们可以通过选择器来缓存模板,比如
var html = ejs("#js_tmpl", { aaa:"xxx", bbb:[1,2,3,4] })
它的第一个参数是CSS选择器,如果你是用jQuery或mass Framework,你可以使用jQuery的任意表达式(mass Framework完全兼容jQuery的自定义伪类), 如果你没有使用框架,它会尝试用querySelectorAll来寻找元素,否则它使用getElementById找元素,当然它在这之前会去掉最前的#
总之,在前端它是使用第一个参数做模板的键,与编译好的函数作为一个键值对放在ejs.cache中
在后端,我们可以利用第三个参数的tid作为模板的键
var html = ejs(source, { aaa:"xxx", bbb:[1,2,3,4] },{tid:"first_tmpl"})
子模板的使用或layout的指定
它们都是使用视图helper实现的,比如我们用include函数作为引入子模板的函数
var fn = ejs(source, data, { helpers:{ include: ejs } })
至于指定layout,可以详看我的newlandjs的set_layout方法与位于/app/views/...中的使用示例
吸收Tj大神的ejs模块的全部优点(向Tj致敬),如准确定位错误与模板套嵌。本模板不使用with与eval!
本模板最先在博客园公布,版本迭代已到v10,并有一批C#的忠实用户在使用,我也长期用于任职公司的内部使用,历经考验。
具体见 http://www.cnblogs.com/rubylouvre/archive/2012/08/06/2624970.html