laytpl( Layui 的一款轻量 JavaScript 模板引擎)

Posted ZhuMeng-Chao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laytpl( Layui 的一款轻量 JavaScript 模板引擎)相关的知识,希望对你有一定的参考价值。

laytpl 是 Layui 的一款轻量 JavaScript 模板引擎,在字符解析上有着比较出色的表现。

laytpl是一款颠覆性的JavaScript模板引擎

文档说明

一、模版语法

输出一个普通字段,不转义html: d.field

输出一个普通字段,并转义html: = d.field

JavaScript脚本: # JavaScript statement

二、内置方法

1):laytpl(template); //核心函数,返回一个对象

var tpl = laytpl(template);

tpl.render(data, callback); //渲染方法,返回渲染结果,支持异步和同步两种模式

a):异步

tpl.render(data, function(result)
console.log(result);

);

b):同步

var result = tpl.render(data);

console.log(result);

2):laytpl.config(options); //初始化配置

options是一个对象

open: \'开始标签\', close: \'闭合标签\'

3):laytpl.v //获取版本号

注意事项

1.直接引入laytpl.js即可,另外还可直接使用Seajs等模块化加载。

2.无论商业或个人平台都可以任意使用laytpl

3.任何场合下都务必保留来源,请勿剔除laytpl.js头部注释。

使用方式

//第一步:编写模版。你可以使用一个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 不转义
= d.field 转义
# JavaScript表达式
#
var fn = function()
return \'2017-08-18\';
;

# if(true)
开始日期: fn()
# else
已截止
#

! template !
对一段指定的模板区域进行过滤,即不解析该区域的模板。注:layui 2.1.6 新增
<div> ! 这里面的模板不会被解析 !</div>

重新定义模板分隔符

laytpl.config(
open: \'<%\',
close: \'%>\'
);

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

参考文献:

模板引擎 laytpl - Layui 文档

https://blog.csdn.net/weixin_30539317/article/details/111967646

https://www.jianshu.com/p/93ab66e6bb73

00016-layui 动态加载菜单 laytpl

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/common/taglibs.jsp"%>
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>管理系统</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="${ctxLayui}/layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="${ctxLayui}/layuiadmin/style/admin.css" media="all">

</head>
<body class="layui-layout-body">

<div id="LAY_app">
    <div class="layui-layout layui-layout-admin">
        <div class="layui-header">
            <!-- 头部区域 -->
            <ul class="layui-nav layui-layout-left">
                <li class="layui-nav-item layadmin-flexible" lay-unselect>
                    <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">
                        <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>
                    </a>
                </li>

                <li class="layui-nav-item" lay-unselect>
                    <a href="javascript:;" layadmin-event="refresh" title="刷新">
                        <i class="layui-icon layui-icon-refresh-3"></i>
                    </a>
                </li>
                <%--<li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <input type="text" placeholder="搜索..." autocomplete="off" class="layui-input layui-input-search" layadmin-event="serach" lay-action="template/search.html?keywords=">
                </li>--%>
            </ul>
            <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">

                <%--<li class="layui-nav-item" lay-unselect>
                    <a lay-href="app/message/index.html" layadmin-event="message" lay-text="消息中心">
                        <i class="layui-icon layui-icon-notice"></i>
                        <!-- 如果有新消息,则显示小圆点 -->
                        <span class="layui-badge-dot"></span>
                    </a>
                </li>--%>
                <%--<li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a href="javascript:;" layadmin-event="theme">
                        <i class="layui-icon layui-icon-theme"></i>
                    </a>
                </li>--%>
                <%--<li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a href="javascript:;" layadmin-event="note">
                        <i class="layui-icon layui-icon-note"></i>
                    </a>
                </li>--%>
                <li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a href="javascript:;" layadmin-event="fullscreen">
                        <i class="layui-icon layui-icon-screen-full"></i>
                    </a>
                </li>
                <li class="layui-nav-item" lay-unselect>
                    <a href="javascript:;">
                        <cite>
                            <shiro:principal property="name"/>
                        </cite>
                    </a>
                    <dl class="layui-nav-child">
                        <dd><a lay-href="system/userInfoForm.jsp#/self=1">基本资料</a></dd>
                        <%--<dd><a lay-href="set/user/password.html">修改密码</a></dd>--%>
                        <hr>
                        <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd>
                    </dl>
                </li>
                    <li class="layui-nav-item " lay-unselect>
                        <a href="javascript:;">
                            <cite data-type="openCall" class="call_seat">坐席</cite>
                        </a>
                    </li>

                <li class="layui-nav-item layui-hide-xs" lay-unselect>
                    <a href="javascript:;" >
                        <%--<i class="layui-icon layui-icon-more-vertical"></i>--%>
                    </a>
                </li>
                <%--<li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect>
                    <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a>
                </li>--%>
            </ul>
        </div>

        <!-- 侧边菜单 -->
        <div class="layui-side layui-side-menu">
            <div class="layui-side-scroll">
                <div class="layui-logo" lay-href="home/console.html">
                    <span>后台管理</span>
                </div>

                <!-- 建议改变真实接口地址时保留lay-url中的?v={{ layui.admin.v }} -->
                <script type="text/html" template
                        lay-done="layui.element.render(‘nav‘, ‘layadmin-system-side-menu‘);" id="TPL_layout">
                    <div lay-templateid="TPL_layout">
                        <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">
                            {{#
                            layui.each(d.data, function(index,item){
                            }}
                            <li class="layui-nav-item {{ item.spread ? item.children && item.children.length > 0 ? ‘layui-nav-itemed‘ : ‘layui-this‘: ‘‘ }}" myDir = "1">
                                {{# if(item.url){ }}
                                <a lay-href="{{ item.url }}" lay-tips="{{ item.name }}" lay-direction="2">
                                    {{# }else{ }}
                                    <a href="javascript:;" lay-tips="{{ item.name }}" lay-direction="2">
                                        {{# } }}
                                        {{# if(item.icon){ }}
                                        <i class="layui-icon {{ item.icon }}"></i>
                                        {{# } }}
                                        <cite>{{ item.name }}</cite>
                                    </a>
                                    {{#
                                    var itemListFun = function(children, myDir){
                                    myDir = myDir || 2;
                                    if( children && children.length > 0){ }}
                                    <dl class="layui-nav-child">
                                        {{# layui.each(children, function(index2, item2){ }}
                                        <dd data-name="{{ item2.code || ‘‘ }}" class="{{ item2.spread ? (item2.children && item2.children.length > 0 ? ‘layui-nav-itemed‘ : ‘layui-this‘ ) : ‘‘}}" myDir="{{ myDir }}">
                                            {{# if(item2.icon){ }}
                                            <i class="layui-icon {{ item.icon }}"></i>
                                            {{# } }}
                                            {{# if(item2.url){ }}
                                            <a lay-href="{{ item2.url }}">{{ item2.name }}</a>
                                            {{# }else{ }}
                                            <a href="javascript:;">{{ item2.name }}</a>
                                            {{# } }}
                                            {{# itemListFun(item2.children,myDir+1);}}
                                        </dd>
                                        {{# }) }}
                                    </dl>
                                    {{#  } }}
                                    {{#  };
                                    itemListFun(item.children); }}
                            </li>
                            {{# }) }}
                        </ul>
                    </div>
                </script>

                </ul>
            </div>
        </div>

        <!-- 页面标签 -->
        <div class="layadmin-pagetabs" id="LAY_app_tabs">
            <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>
            <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>
            <div class="layui-icon layadmin-tabs-control layui-icon-down">
                <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">
                    <li class="layui-nav-item" lay-unselect>
                        <a href="javascript:;"></a>
                        <dl class="layui-nav-child layui-anim-fadein">
                            <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>
                            <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>
                            <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>
                        </dl>
                    </li>
                </ul>
            </div>
            <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">
                <ul class="layui-tab-title" id="LAY_app_tabsheader">
                    <li lay-id="home/console.jsp" lay-attr="home/console.jsp" class="layui-this"><i class="layui-icon layui-icon-home"></i></li>
                </ul>
            </div>
        </div>

        <!-- 主体内容 -->
        <div class="layui-body" id="LAY_app_body">
            <div class="layadmin-tabsbody-item layui-show">
                <iframe src="home/console.jsp" frameborder="0" class="layadmin-iframe"></iframe>
            </div>
        </div>

        <!-- 辅助元素,一般用于移动设备下遮罩 -->
        <div class="layadmin-body-shade" layadmin-event="shade"></div>
    </div>
</div>

<script src="${ctxLayui}/layuiadmin/layui/layui.js"></script>
<script>
    layui.config({
        base: ‘${ctxLayui}/layuiadmin/‘ //静态资源所在路径
        ,version:new Date().getTime()
    }).extend({
        index: ‘lib/index‘ //主入口模块
    }).use([‘index‘,‘laytpl‘,‘common‘,‘form‘,‘dict‘,‘laydate‘],function () {
        var $ = layui.$;
        var admin = layui.admin;
        var laytpl = layui.laytpl;
        var element = layui.element;
        var form = layui.form;
        var dict = layui.dict;
        var laydate = layui.laydate;

        var menuTpl = top.layui.view(‘TPL_layout‘);
        menuTpl.container.attr(‘lay-url‘, ctx+‘/business/businessUser/getMenuList?v=‘+layui.admin.v);//可更改url

        menuTpl.refresh();
    });
</script>

</body>
</html>

接口:business/businessUser/getMenuList 的返回结构为:BusinessMenuPo

/**
 * 名称
 */
private String name;

/**
 * 代码
 */
private String code;

/**
 * 父ID
 */
private Long parentId;

/**
 * 菜单类型;1-分类;2-模块;3-功能;4-按键
 */
private Integer type;

/**
 * 链接URL
 */
private String url;
/**
 * 排序
 */
private Integer sortOrder;

private List<BusinessMenuPo> children;

以上是关于laytpl( Layui 的一款轻量 JavaScript 模板引擎)的主要内容,如果未能解决你的问题,请参考以下文章

00016-layui 动态加载菜单 laytpl

00016-layui 动态加载菜单 laytpl

模板引擎文档 - layui.laytpl 介绍

layui模板引擎如何使用第一季

layUI独立组件layer-laydate-laypage项目实践用法

layui 模板里面使用第三方方法