227 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			227 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						||
<html>
 | 
						||
<head>
 | 
						||
<meta charset="utf-8">
 | 
						||
<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
						||
<title>视图模板引擎 - layui</title>
 | 
						||
 | 
						||
<link rel="stylesheet" href="../src/css/layui.css">
 | 
						||
<style>
 | 
						||
.laytpl-demo{border: 1px solid #EBEBEB;}
 | 
						||
.laytpl-demo>textarea{position: relative; display: block; width:100%; height: 300px; padding: 11px; border: 0; box-sizing: border-box; resize: none; background-color: #fff; font-family: Courier New; font-size: 13px;}
 | 
						||
.laytpl-demo>div:first-child{height: 32px; line-height: 32px; padding: 6px 11px; border-bottom: 1px solid #EBEBEB; background-color: #F8F9FA;}
 | 
						||
</style>
 | 
						||
</head>
 | 
						||
<body>
 | 
						||
 | 
						||
<div>
 | 
						||
  
 | 
						||
  <div class="layui-row">
 | 
						||
    <div class="layui-col-xs6 laytpl-demo">
 | 
						||
      <div>模板</div>
 | 
						||
      <textarea id="demoTPL1"><h1>{{ d.title }}</h1>
 | 
						||
 | 
						||
<p>转义输出(HTML):{{ d.desc }}</p>
 | 
						||
<p>转义输出(HTML):{{= d.desc }}</p>
 | 
						||
<p>原始输出(HTML):{{- d.desc }}</p>
 | 
						||
{{#}}
 | 
						||
 | 
						||
<div class="layui-section">
 | 
						||
  <hr>
 | 
						||
  <ul>
 | 
						||
  {{# var str = "a  b		c";
 | 
						||
  layui.each(d.items, function(index, item){ }}
 | 
						||
    <li class="{{ index > 0 ? 'list' : '' }}">
 | 
						||
      <strong>{{ item.title }}</strong>
 | 
						||
      {{# if(item.content){ }}
 | 
						||
        <span>{{ item.content }}</span>
 | 
						||
      {{# } }}
 | 
						||
      <span>{{ item.time || '' }}</span>
 | 
						||
      {{ str }}
 | 
						||
      
 | 
						||
      
 | 
						||
    </li>
 | 
						||
  {{# });  if(d.items.length === 0){ }}
 | 
						||
    无数据
 | 
						||
  {{# } }} 
 | 
						||
  </ul>
 | 
						||
  <hr>
 | 
						||
</div>
 | 
						||
 | 
						||
<div>
 | 
						||
  {{ d.content || '' }}
 | 
						||
  {{ }} {{}}
 | 
						||
  {{ }}
 | 
						||
  
 | 
						||
  \a
 | 
						||
  '12'"""""
 | 
						||
  "哈''哈"
 | 
						||
</div>
 | 
						||
 | 
						||
<p>渲染时间:{{ layui.util.toDateString(new Date()) }}</p></textarea>
 | 
						||
    </div>
 | 
						||
    
 | 
						||
    <div class="layui-col-xs6 laytpl-demo">
 | 
						||
      <div class="layui-row">
 | 
						||
        <div class="layui-col-xs3">数据</div>
 | 
						||
        <div class="layui-col-xs9" style="text-align: right">
 | 
						||
          <button class="layui-btn layui-btn-sm layui-btn-primary" lay-on="createData">生成数据</button>
 | 
						||
        </div>
 | 
						||
      </div>
 | 
						||
      <textarea id="demoData1">
 | 
						||
{
 | 
						||
  "title": "标题",
 | 
						||
  "desc": "<a href=\"\" style=\"color:blue;\">一段描述</a>",
 | 
						||
  "items": [
 | 
						||
    {
 | 
						||
      "title": "list 1",
 | 
						||
      "child": [{
 | 
						||
        "title": "list 1-1",
 | 
						||
        "child": [{
 | 
						||
          "title": "list 1-1-1"
 | 
						||
        }]
 | 
						||
      }]
 | 
						||
    },
 | 
						||
    {
 | 
						||
      "title": "list 2",
 | 
						||
      "child": [{
 | 
						||
        "title": "list 2-1"
 | 
						||
      }]
 | 
						||
    },
 | 
						||
    {"title": "list 3"}
 | 
						||
  ]
 | 
						||
}</textarea>
 | 
						||
    </div>
 | 
						||
    <div class="layui-col-xs12 laytpl-demo">
 | 
						||
      <div class="layui-row">
 | 
						||
        <div class="layui-col-xs4">视图</div>
 | 
						||
        <div class="layui-col-xs4" style="text-align: center">
 | 
						||
            <button class="layui-btn layui-btn-sm layui-btn-primary" lay-on="test1">性能测试</button>
 | 
						||
        </div>
 | 
						||
        <div class="layui-col-xs4" style="text-align: right">
 | 
						||
          <span id="demoViewTime"></span>
 | 
						||
        </div>
 | 
						||
       </div>
 | 
						||
      <div class="layui-padding-sm" id="demoView1"></div>
 | 
						||
    </div>
 | 
						||
  </div>
 | 
						||
  
 | 
						||
  
 | 
						||
  <script type="type/html" template id="demoTplCommon">
 | 
						||
    公共模板 - {{ d.title }}
 | 
						||
  </script>
 | 
						||
  
 | 
						||
  <script type="type/html" template id="demoTplList">
 | 
						||
    {{# if(d.items && d.items.length > 0){ }}
 | 
						||
      <ul>
 | 
						||
        {{# layui.each(d.items, function(index, item){ }}
 | 
						||
          <li><strong>{{ item.title }}</strong>{{ laytpl.include('demoTplList', {items: item.child}) }}</li>
 | 
						||
        {{# }); }}
 | 
						||
      </ul>
 | 
						||
    {{# } }}
 | 
						||
  </script>
 | 
						||
 | 
						||
  <script type="type/html" template id="laytplTestTpl">
 | 
						||
    {{# for(var i = 0; i < d.items.length; i++){ }}
 | 
						||
      第{{= d.items[i].index }}个,Name: {{- d.items[i].name }}   Number: {{= d.items[i].number }} 
 | 
						||
    {{# } }}
 | 
						||
  </script>
 | 
						||
  
 | 
						||
</div>
 | 
						||
 | 
						||
<script src="../src/layui.js"></script>
 | 
						||
<script>
 | 
						||
layui.use(['laytpl', 'util'], function(){
 | 
						||
  var laytpl = layui.laytpl
 | 
						||
  ,util = layui.util
 | 
						||
  ,$ = layui.$;
 | 
						||
  
 | 
						||
  //获取模板和数据
 | 
						||
  var get = function(type){
 | 
						||
    return {
 | 
						||
      template: $('#demoTPL1').val() //获取模板
 | 
						||
      ,data: function(){  //获取数据
 | 
						||
        try {
 | 
						||
          return JSON.parse($('#demoData1').val());
 | 
						||
        } catch(e){
 | 
						||
          $('#demoView1').html(e);
 | 
						||
        }
 | 
						||
      }()
 | 
						||
    };
 | 
						||
  };
 | 
						||
  
 | 
						||
  var data = get();
 | 
						||
  
 | 
						||
  //耗时计算
 | 
						||
  var startTime = new Date().getTime(), timer = function(startTime, title){
 | 
						||
    var endTime = new Date().getTime();
 | 
						||
    $('#demoViewTime').html((title || '模板解析耗时:')+ (endTime - startTime) + 'ms');
 | 
						||
  };
 | 
						||
 | 
						||
  //渲染模板
 | 
						||
  var thisTpl = laytpl(data.template);
 | 
						||
 | 
						||
  //执行渲染
 | 
						||
  thisTpl.render(data.data, function(view){
 | 
						||
    timer(startTime);
 | 
						||
    $('#demoView1').html(view);
 | 
						||
  });
 | 
						||
  
 | 
						||
  //编辑
 | 
						||
  $('.laytpl-demo textarea').on('input', function(){
 | 
						||
    var data = get();
 | 
						||
    if(!data.data) return;
 | 
						||
    
 | 
						||
    //计算模板渲染耗时
 | 
						||
    var startTime = new Date().getTime();
 | 
						||
    
 | 
						||
    //若模板有变化,则重新解析模板;若模板没变,数据有变化,则从模板缓存中直接渲染(效率大增)
 | 
						||
    if(this.id === 'demoTPL1'){ 
 | 
						||
      thisTpl.parse(data.template, data.data); //解析模板
 | 
						||
    }
 | 
						||
    
 | 
						||
    //执行渲染
 | 
						||
    thisTpl.render(data.data, function(view){
 | 
						||
      timer(startTime);
 | 
						||
      $('#demoView1').html(view);
 | 
						||
    });
 | 
						||
  });
 | 
						||
  
 | 
						||
  //事件
 | 
						||
  util.event('lay-on', {
 | 
						||
    //性能测试
 | 
						||
    test1: function(){
 | 
						||
      var dataLen = 1000 //数据量
 | 
						||
      ,renderTimes = 1000; //渲染次数
 | 
						||
      
 | 
						||
      //初始化数据
 | 
						||
      var data = {
 | 
						||
        title: '性能测试'
 | 
						||
        ,items: function(items){
 | 
						||
          for(var i = 0; i < dataLen; i++){
 | 
						||
            items.push({
 | 
						||
              index: i
 | 
						||
              ,name: '<strong style="color: red;">张三</strong>'
 | 
						||
              ,number: 100+i
 | 
						||
            });
 | 
						||
          }
 | 
						||
          return items;
 | 
						||
        }([])
 | 
						||
      };
 | 
						||
      
 | 
						||
      //模板
 | 
						||
      var startTime = new Date();
 | 
						||
      for(var j = 0; j < renderTimes; j++){
 | 
						||
        var template = document.getElementById('laytplTestTpl').innerHTML;
 | 
						||
        var html = laytpl(template).render(data);
 | 
						||
      }
 | 
						||
      timer(startTime, '本次测试耗时:');
 | 
						||
      $('#demoView1').html(html);
 | 
						||
      
 | 
						||
    }
 | 
						||
  });
 | 
						||
});
 | 
						||
</script>
 | 
						||
</body>
 | 
						||
</html>
 |