mirror of https://github.com/layui/layui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.5 KiB
3.5 KiB
{{!
<style>
.laytpl-demo{border: 1px solid #eee;}
.laytpl-demo:first-child{border-right: none;}
.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 #eee; background-color: #F8F9FA;}
</style>
<div class="layui-row">
<div class="layui-col-xs6 laytpl-demo">
<div>模板</div>
<textarea id="ID-tpl-src">
<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>
{{# }); }}
<p>{{# if(d.list.length === 0){ }}
无数据
{{# } }}</p>
</ul>
</textarea>
</div>
<div class="layui-col-xs6 laytpl-demo">
<div>数据</div>
<textarea id="ID-tpl-data">
{
"title": "Layui 常用模块",
"list": [
{
"modname": "弹层",
"alias": "layer",
"site": "layer.domain.com"
},
{
"modname": "表单",
"alias": "form"
},
{
"modname": "表格",
"alias": "table"
},
{
"modname": "日期",
"alias": "laydate"
},
{
"modname": "上传",
"alias": "upload"
}
]
}
</textarea>
</div>
<div class="layui-col-xs12 laytpl-demo" style="border-top: none;">
<div class="layui-row">
<div class="layui-col-xs6">视图</div>
<div class="layui-col-xs6" style="text-align: right">
<span id="ID-tpl-viewtime"></span>
</div>
</div>
<div class="layui-padding-sm" id="ID-tpl-view" style="max-height: 300px; padding: 16px; overflow: auto;">…</div>
</div>
</div>
<div class="layui-clear"></div>
<!-- import layui -->
<script>
layui.use(function(){
var laytpl = layui.laytpl;
var util = layui.util;
var $ = layui.$;
// 获取模板和数据
var get = function(type){
return {
template: $('#ID-tpl-src').val(), // 获取模板
data: function(){ // 获取数据
try {
return JSON.parse($('#ID-tpl-data').val());
} catch(e){
$('#ID-tpl-view').html(e);
}
}()
};
};
var data = get();
// 耗时计算
var startTime = new Date().getTime(), timer = function(startTime, title){
var endTime = new Date().getTime();
$('#ID-tpl-viewtime').html((title || '模板解析耗时:')+ (endTime - startTime) + 'ms');
};
// 渲染模板
var thisTpl = laytpl(data.template);
// 执行渲染
thisTpl.render(data.data, function(view){
timer(startTime);
$('#ID-tpl-view').html(view);
});
// 编辑
$('.laytpl-demo textarea').on('input propertychange', function(){
var data = get();
if(!data.data) return;
// 计算模板渲染耗时
var startTime = new Date().getTime();
// 若模板有变化,则重新解析模板;若模板没变,数据有变化,则从模板缓存中直接渲染(效率大增)
if(this.id === 'ID-tpl-src'){
thisTpl.parse(data.template, data.data); // 解析模板
}
// 执行渲染
thisTpl.render(data.data, function(view){
timer(startTime);
$('#ID-tpl-view').html(view);
});
});
});
</script>
<p>!}}