模板引擎 - layui.laytpl

快速使用

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

layui.use('laytpl', function(){
  var laytpl = layui.laytpl;
  
  //直接解析字符
  laytpl('{{ d.name }}是一位公猿').render({
    name: '贤心'
  }, function(string){
    console.log(string); //贤心是一位公猿
  });
  
  //你也可以采用下述同步写法,将 render 方法的回调函数剔除,可直接返回渲染好的字符
  var string =  laytpl('{{ d.name }}是一位公猿').render({
    name: '贤心'
  });
  console.log(string);  //贤心是一位公猿
  
  //如果模板较大,你也可以采用数据的写法,这样会比较直观一些
  laytpl([
    '{{ d.name }}是一位公猿'
    ,'其它字符 {{ d.content }}  其它字符'
  ].join(''))
}); 

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

//第一步:编写模版。你可以使用一个script标签存放模板,如:
<script id="demo" type="text/html">
  <h3>{{ d.title }}</h3>
  <ul>
  {{#  layui.each(d.list, function(index, item){ }}
    <li>
      <span>{{ item.modname }}</span>
      <span>{{ item.alias }}:</span>
      <span>{{ item.site || '' }}</span>
    </li>
  {{#  }); }}
  {{#  if(d.list.length === 0){ }}
    无数据
  {{#  } }} 
  </ul>
</script>
 
//第二步:建立视图。用于呈现渲染结果。
<div id="view"></div>
 
//第三步:渲染模版
var data = { //数据
  "title":"Layui常用模块"
  ,"list":[{"modname":"弹层","alias":"layer","site":"layer.layui.com"},{"modname":"表单","alias":"form"}]
}
var getTpl = demo.innerHTML
,view = document.getElementById('view');
laytpl(getTpl).render(data, function(html){
  view.innerHTML = html;
});

模版语法

语法 说明 示例
{{ d.field }} 输出一个普通字段,不转义html
 

codelayui.code

  1. <div>{{ d.content }}</div>
  2.  
{{= d.field }} 输出一个普通字段,并转义html
 

codelayui.code

  1. <h2>{{= d.title }}</h2>
  2.  
{{# JavaScript表达式 }} JS 语句。一般用于逻辑处理。用分隔符加 # 号开头。

注意:如果你是想输出一个函数,正确的写法是:{{ fn() }},而不是:{{# fn() }}
 

codelayui.code

  1. {{#
  2. var fn = function(){
  3. return '2017-08-18';
  4. };
  5. }}
  6.  
  7. {{# if(true){ }}
  8. 开始日期:{{ fn() }}
  9. {{# } else { }}
  10. 已截止
  11. {{# } }}
  12.  
{{! template !}} 对一段指定的模板区域进行过滤,即不解析该区域的模板。注:layui 2.1.6 新增
 

codelayui.code

  1. <div> {{! 这里面的模板不会被解析 !}}</div>
  2.  

分隔符

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

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

猜你喜欢

转载自blog.csdn.net/qq_35393693/article/details/81705130