• JavaScript模板引擎Handlebars


    Handlebars模板库简单介绍

    Handlebars是JavaScript一个语义模板库,通过对view(模板)和data(ajax请求的数据,一般是json)的分离来快速构建Web模板。它采用"Logic-less template"(无逻辑模版)的思路,在加载时被预编译(先对view进行编译生成模板,之后只要把json数据套进去就行了),而不是到了客户端执行到代码时再去编译,这样可以保证模板加载和运行的速度。Handlebars兼容Mustache,你可以在Handlebars中导入Mustache模板。

    Handlebars expressions是handlebars模板中最基本的单元,使用方法是加两个花括号{{value}}, handlebars模板会自动匹配相应的数值,对象甚至是函数。

    当你想要复用模板的一部分,或者将长模板分割成为多个模板方便维护时,partials就派上用场了。

    通过{{}}取出来的内容(把json的数据取到后,显示在模板中时),都会经过编码,也就是说,如果取出的内容中包含html标签,会被转码成纯文本,不会被当成html解析,实际上就是做了类似这样的操作:把<用&lt;替代。这样做是很好的,既可以显示html代码(转码后的html),又可以避免xss注入(避免显示的内容是script,或者href,img等有跨站脚本攻击的标签)。这个功能在做代码展示的时候是非常有用的。但是有时候我们可能需要解析html,不要转码,很简单,把{{}}换成{{{}}}就可以啦。

    Handlebars模板库简单使用

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div style="background: #ffffff; text-align: center;">
    <table id="workTimeTable" width="100%" border="0" cellspacing="0" cellpadding="0" class="table table02 table-striped table-hover bdtp0 bdbtmDotted">
    <thead>
    <tr>
    <th scope="col" width="35%">上班时间</th>
    <th scope="col" width="35%">下班时间</th>
    <th scope="col" width="30%">操作</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>
    <input type="text" value="0" class="inputEdit02" name="onTime" readonly /></td>
    <td>
    <input type="text" value="1" class="inputEdit02" name="offTime" readonly /></td>

    <td class="czTd">
    <a href="javascript:void(0)" class="czTdAdd">
    增加</a>
    <a href="javascript:void(0)" class="czTdDelete">
    删除</a>
    </td>
    </tr>
    </tbody>
    </table>
    </div>
    </form>
    </body>
    </html>
    <!-- 建立模板 -->
    <script type="text/x-handlebars-template" id="table-template">
    {{#each conditions}}
    <tr>
    <td>
    <input type="text" value="{{onTime}}" class="inputEdit02" readonly /></td>
    <td>
    <input type="text" value="{{offTime}}" class="inputEdit02" readonly /></td>

    <td class="czTd">
    <a href="javascript:void(0)" class="czTdAdd">
    增加</a>
    <a href="javascript:void(0)" class="czTdDelete">
    删除</a>
    </td>
    </tr>
    {{/each}}
    </script>
    <script src="jquery-1.10.2.min.js"></script>
    <script src="handlebars-v3.0.1.js"></script>
    <script type="text/javascript">
    //模板data
    var data;
    //1.注册一个handlebars模板,通过id找到某一个模板,获取模板的html框架
    var tableTemplate = Handlebars.compile($("#table-template").html());
    $(function () {
    //2.模拟的json对象
    data = initTemplateData(data, "", "", "");
    //初次加载
    $("#workTimeTable tbody").append(tableTemplate(data));
    data = initTemplateData(data, "", "", "");

    //3.将json对象用刚刚注册的handlebars模板封装,得到最终的html,插入到基本的table中
    $(document).off("click", ".czTdAdd");
    $(document).on("click", ".czTdAdd", function () {
    data = initTemplateData(data, "", "", "");
    $("#workTimeTable tbody").append(tableTemplate(data));
    });

    //清除一行
    $(document).on("click", ".czTdDelete", function () {
    var leth = $(this).parents("table").find("tr").length;
    if (leth == 2) {
    $("#workTimeTable tbody").html("");
    data = initTemplateData(data, "", "", "");
    $("#workTimeTable tbody").append(tableTemplate(data));
    return;
    }
    $(this).parents("tr").remove();
    });
    });

    //模板data初始化
    function initTemplateData(data, id, onTime, offTime) {
    data = {
    "conditions": [
    {
    "id": id,
    "onTime": onTime,
    "offTime": offTime
    }
    ]
    }
    return data;
    }

    </script>

    再三须慎意,第一莫欺心
  • 相关阅读:
    Android Zygote介绍
    Android binder介绍(下)
    Android binder介绍(上)
    Android init介绍(下)
    Android init介绍(上)
    Android 网络服务介绍
    Linux代理服务器使用
    Linux ALSA介绍
    ZigBee MAC层(下)
    ZigBee MAC层(上)
  • 原文地址:https://www.cnblogs.com/otsf/p/10648392.html
Copyright © 2020-2023  润新知