本项目借鉴自artTemplate、juicer、laytpl等诸多项目,在学习这些项目的过程中编写而成。 源码中有大量注释,可以用来学习 javascript 模板引擎的编写。
👉 演示地址
👉 学习笔记
var render = catpl(source);
var html = render(data);
source
可以是模板字符串或存放有模板字符串的页面元素的id(catpl会根据元素的innerHTML或value属性获取模板字符串)。
生成的 render
为一个编译好的函数,可以接收数据对象来生成最终的html。
该项目目前只有两个配置项:
openTag
:逻辑表达式起始标志,默认为{{closeTag
:逻辑表达式关闭标志,默认为}}
可以通过catpl.set()
方法进行设置,例如:
catpl.set('openTag', '{{')
或
catpl.set({
openTag : '{{' ,
closeTag : '}}'
})
对 < > " ' &
字符进行转码输出:
{{name}}
不转码输出:
{{#name}}
算术运算
catpl("{{a + b}}")({a : 1, b : 2}); //输出为2
字符串运算
catpl("{{a + b}}")({a : "1", b : "2"}); //输出为"12"
三元运算
catpl("{{a > b ? 'a大于b' : 'a小于等于b'}}")({a : 1, b : 2}) //输出为"a小于等于b"
{{if condition}}
{{else condition}}
{{else}}
{{/if}}
{{foreach userList as user i}}
<li>{{i}} : {{user.name}}</li>
{{/foreach}}
可以简写为(其中 $index
和 $value
为固定写法):
{{foreach userList}}
<li>{{$index}} - {{$value.name}}</li>
{{/foreach}}
嵌入子模板:
{{include 'template'}}
子模板默认共享当前数据,也可以指定当前数据中的某个键下的数据为子模板的渲染数据:
{{include 'template' key}}
为 catpl 注册公用的辅助方法:
catpl.helper('fun_name', function (date, param) {
// ..
return date;
});
模板中使用辅助方法的语法:
{{data_name | fun_name:'param1','param2'}}
可以连续使用多个辅助方法,调用顺序为从左至右:
{{data_name | fun_name1:'param1','param2' | fun_name2 | fun_name3}}
注意 '|' 字符左右的空格不能缺少
Under MIT license. Copyright by 李昱(liyu365)