模板引擎文档 - layui.laytpl

laytpl 是 JavScript 模板引擎,在字符解析上有着比较出色的表现,欠缺之处在于异常调试上。由于传统意义的前端模板引擎已经变得不再流行,所以 laytpl 后续可能会进行重写,目前方向暂时还没有想好,预计会在layui比较稳定后开始实施。

模块加载名称:laytpl,在线调试:http://www.layui.com/demo/laytpl.html

快速使用

与一般的字符拼接不同的是,laytpl 的模板可与数据分离,集中把逻辑处理放在 View 层,提升代码可维护性,尤其是针对大量模板渲染的情况。

  1. layui.use('laytpl', function(){
  2. var laytpl = layui.laytpl;
  3.  
  4. //直接解析字符
  5. laytpl('{{ d.name }}是一位公猿').render({
  6. name: '贤心'
  7. }, function(string){
  8. console.log(string); //贤心是一位公猿
  9. });
  10.  
  11. //你也可以采用下述同步写法,将 render 方法的回调函数剔除,可直接返回渲染好的字符
  12. var string = laytpl('{{ d.name }}是一位公猿').render({
  13. name: '贤心'
  14. });
  15. console.log(string); //贤心是一位公猿
  16.  
  17. //如果模板较大,你也可以采用数据的写法,这样会比较直观一些
  18. laytpl([
  19. '{{ d.name }}是一位公猿'
  20. ,'其它字符 {{ d.content }} 其它字符'
  21. ].join(''))
  22. });

你也可以将模板存储在页面或其它任意位置:

  1. //第一步:编写模版。你可以使用一个script标签存放模板,如:
  2. <script id="demo" type="text/html">
  3. <h3>{{ d.title }}</h3>
  4. <ul>
  5. {{# layui.each(d.list, function(index, item){ }}
  6. <li>
  7. <span>{{ item.modname }}</span>
  8. <span>{{ item.alias }}:</span>
  9. <span>{{ item.site || '' }}</span>
  10. </li>
  11. {{# }); }}
  12. {{# if(d.list.length === 0){ }}
  13. 无数据
  14. {{# } }}
  15. </ul>
  16. </script>
  17.  
  18. //第二步:建立视图。用于呈现渲染结果。
  19. <div id="view"></div>
  20.  
  21. //第三步:渲染模版
  22. var data = { //数据
  23. "title":"Layui常用模块"
  24. ,"list":[{"modname":"弹层","alias":"layer","site":"layer.layui.com"},{"modname":"表单","alias":"form"}]
  25. }
  26. var getTpl = demo.innerHTML
  27. ,view = document.getElementById('view');
  28. laytpl(getTpl).render(data, function(html){
  29. view.innerHTML = html;
  30. });

模版语法

语法说明示例
{{ d.field }}输出一个普通字段,不转义html
  1. <div>{{ d.content }}</div>
{{= d.field }}输出一个普通字段,并转义html
  1. <h2>{{= d.title }}</h2>
{{# JavaScript表达式 }}JS 语句。一般用于逻辑处理。用分隔符加 # 号开头。

注意:如果你是想输出一个函数,正确的写法是:{{ fn() }},而不是:{{# fn() }}
  1. {{#
    var fn = function(){
  2. return 2017-08-18’;
  3. };
  4. }}
  5.  
  6. {{# if(true){ }}
  7. 开始日期:{{ fn() }}
  8. {{# } else { }}
  9. 已截止
  10. {{# } }}
{{! template !}}对一段指定的模板区域进行过滤,即不解析该区域的模板。注:layui 2.1.6 新增
  1. <div> {{! 这里面的模板不会被解析 !}}</div>

分隔符

如果模版默认的 {{ }} 分隔符与你的其它模板(一般是服务端模板)存在冲突,你也可以重新定义分隔符:

  1. laytpl.config({
  2. open: '<%',
  3. close: '%>'
  4. });
  5.  
  6. //分割符将必须采用上述定义的
  7. laytpl([
  8. '<%# var type = "公"; %>' //JS 表达式
  9. ,'<% d.name %>是一位<% type %>猿。'
  10. ].join('')).render({
  11. name: '贤心'
  12. }, function(string){
  13. console.log(string); //贤心是一位公猿
  14. });

结语

laytpl 应用在 layui 的很多模块中,如:layim、table 等。尽管传统意义的前端模板引擎已经变得不再流行,但 laytpl 仍然可以发挥一定作用,不妨尝试一下吧。

layui - 用心与你沟通