前台模板引擎Handlebars的使用总结(二)

作者 : 开心源码 本文共3956个字,预计阅读时间需要10分钟 发布时间: 2022-05-12 共233人阅读

一、Handlebars模板的转义问题

1.模板中
当使用{{ }}时,转义,输出HTML字符串
当使用{{{ }}}时,不转义(识别html标签属性),输出HTML

2.Helpers中
当return ‘<span style=’color:red’>safe string</span>’ 时,转义,输出HTML字符串
当return new Handlebars.SafeString(‘<span style=’color:red’>safe string</span>’)时,不转义,输出HTML

在模板中:

<script id="entry-template" type="text/template">    <div>        <h2>{{title}}</h2>        <h3>转义:{{content}}</h3>        <h3>不转义:{{{content}}}</h3>    </div></script><script type="text/javascript">    var source = $("#entry-template").html();    var template = Handlebars.compile(source);    //定义要展现的数据    var context = {        title: "测试转义内容",        content: "<span style='color:red'>请看我的字体颜色</span>"};    var html = template(context);    $("body").html(html);</script>

效果图

在Helpers中:

/** * 分割字符串,默认英文逗号分隔,得到图片的路径并返回img标签,不转义 */Handlebars.registerHelper('splitBySymbol', function(tag) {    var ret = "",symbolTag=",";    if(tag!= null && tag!=""){        var tags = tag.split(symbolTag);        if(tags!=null && tags.length > 0){            for(var i=0, j=tags.length; i<j; i++) {                ret = ret + "<img src='"+tags[i]+"'/>";            }            return new Handlebars.SafeString(ret);        }    }else{        return "";    }    return new Handlebars.SafeString(ret);});

二、自己设置Helpers转义json字符串并获取对应key的value

    /**     * 自己设置Helper转换json字符串,并获取对应的值     * getJsonValueByKey:函数名     * str:json字符串     * key:要获取json对象键名称     * */    Handlebars.registerHelper("getJsonValueByKey",function(str,key) {        if(str==null || str=="") {            return str;        }        if(typeof str === "string"){            return JSON.parse(str)[key];        }        return "";    });

示例代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <script src="//code.jquery.com/jquery-1.8.2.min.js"></script>    <script src="//cdn.bootcss.com/handlebars.js/4.0.6/handlebars.js"></script>    <title>handlebars</title></head><body></body><script id="entry-template" type="text/template">    <div>        <h2>{{title}}</h2>        <h3>今天是            <span>{{getJsonValueByKey date 'year'}}年</span>            <span>{{getJsonValueByKey date 'month'}}月</span>            <span>{{getJsonValueByKey date 'day'}}日</span>        </h3>    </div></script><script type="text/javascript">     /**     * 自己设置Helper转换json字符串,并获取对应的值     * getJsonValueByKey:函数名     * str:json字符串     * key:要获取json对象键名称     * */    Handlebars.registerHelper("getJsonValueByKey",function(str,key) {        if(str==null || str=="") {            return str;        }        if(typeof str === "string"){            return JSON.parse(str)[key];        }        return "";    });    var source = $("#entry-template").html();    var template = Handlebars.compile(source);    //定义要展现的数据    var context = {        title: "自己设置Helpers转义json字符串并获取对应key的value",        date: '{"year":"2018","month":"12","day":"22"}'    };    var html = template(context);    $("body").html(html);</script></html>

效果图如下:

三、自己设置Helpers判断两个变量能否相等

Handlebars.registerHelper('eq', function(v1, v2, opts) {    if(v1 == v2){        return opts.fn(this);   }else{        /*取反,执行模板里面的else语句*/        return opts.inverse(this);  }});

示例代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <script src="//code.jquery.com/jquery-1.8.2.min.js"></script>    <script src="//cdn.bootcss.com/handlebars.js/4.0.6/handlebars.js"></script>    <title>handlebars</title></head><body></body><script id="entry-template" type="text/template">    <h3>        {{#eq num 12}}             现在是{{this.num}}月份        {{else}}            现在不是{{this.num}}月份        {{/eq}}    </h3></script><script type="text/javascript">    Handlebars.registerHelper('eq', function(v1, v2, opts) {        if(v1 == v2){            return opts.fn(this);        }else{            /*取反,执行模板里面的else语句*/            return opts.inverse(this);        }    });    var source = $("#entry-template").html();    var template = Handlebars.compile(source);    //定义要展现的数据    var context = {        num:12    };    var html = template(context);    $("body").html(html);</script></html>

效果图

四、使用.来访问属性,使用../来访问父级属性
示例代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <script src="//code.jquery.com/jquery-1.8.2.min.js"></script>    <script src="//cdn.bootcss.com/handlebars.js/4.0.6/handlebars.js"></script>    <title>handlebars</title></head><body></body><script id="entry-template" type="text/template">    {{#each author}}        <h1>标题:{{../title}}</h1>        <h2>姓名:{{this.name}}</h2>        <h3>年龄:{{this.age}}</h3>    {{/each}}</script><script type="text/javascript">    var source = $("#entry-template").html();    var template = Handlebars.compile(source);    //定义要展现的数据    var context = {        title: "This is title",        id:20,        author: [{            name: "王一博",            age: 20        }],        content: "This is content"    }    var html = template(context);    $("body").html(html);</script></html>

原文作者技术博客:https://www.songma.com/u/ac4daaeecdfe
95后前台妹子一枚,爱阅读,爱交友,将工作中遇到的问题记录在这里,希望给每一个看到的你能带来一点帮助。
欢迎留言交流。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 前台模板引擎Handlebars的使用总结(二)

发表回复