美文网首页
模板引擎-Handlebars的实际项目

模板引擎-Handlebars的实际项目

作者: 唐人不自醉 | 来源:发表于2018-09-18 14:22 被阅读111次
    Handlebars

    一. 为什么要使用模板引擎

    关于为什么要使用模板引擎, 就我现在的项目而言,我还停留在进行发送Ajax请求到后台后,利用模板引擎拼接接受到的JSON字符串,展现到页面的地步. 按照我老师的一句话表达:不用重复制造轮子. 本文学习借鉴了简书大牛Lee_tanghui,以下就是用模板引擎的好处:

    模板最本质的作用是【变静为动】一切利用这方面的都是优势,不利于的都是劣势。要很好地实现【变静为动】的目的,有这么几点:

    1. 可维护性(后期改起来方便);
    2. 可扩展性(想要增加功能,增加需求方便);
    3.开发效率提高(程序逻辑组织更好,调试方便);
    4.看起来舒服(不容易写错);

    从以上四点,你仔细想想,前端模板是不是无论从哪方便优势体现都不是一点两点。其实最重要的一点就是:【视图(包括展示渲染逻辑)与程序逻辑的分离】分离的好处太多了,更好改了,更好加东西了,调试也方便了,看起来也舒服了,应用优秀的开发模式更方便了(mvvc,mvc等).

    二. 选择Handlebars的原因

    1. 全球最受欢迎的模板引擎

    Handlebars是全球使用率最高的模板引擎,所以当之无愧是全球最受欢迎的模板引擎.Handlebars在许多前端框架中都被引入,比如在MUI和AmazeUI等框架,都推荐使用Handlebars.

    2. 语法简单

    Handlebars的基本语法极其简单,使用{{value}}将数据包装起来即可,Handlebars会自动匹配响应的数值和对象.以下是一个最简单的模板:

    <div class="demo">
        <h1>{{name}}</h1>
        <p>{{content}}</p>
    </div>
    

    三.如何使用Handlebars

    1. 下载Handlebars

    2. 引入Handlebars

    通过<script>标签引入即可,和引入jQuery库类似:

    <script src="./js/handlebars-1.0.0.beta.6.js"></script>
    

    3. 创建模板

    • 步骤一: 通过一个<script>将需要的模板包裹起来
    • 步骤二: 在<script>标签中填入type和id
      • type类型可以是除text/javascript以外的任何MIME类型,但推荐使用type="text/template",更加语义化
      • id是在后面进行编译的时候所使用,让其编译的代码找到该模板.
    • 步骤三: 在<script>标签中插入我们需要的html代码,根据后台给我们的接口文档,修改其需要动态获取的内容
    <script type="text/template" id="myTemplate">
        <div class="demo">
            <h1>{{name}}</h1>
            <p>{{content}}</p>
        </div>
    </script>
    

    4. 在JS代码中编译模板

    //用jQuery获取模板
    var tpl   =  $("#myTemplate").html();
    //预编译模板
    var template = Handlebars.compile(tpl);
    //匹配json内容
    var html = template(data);
    //输入模板
    $('#box').html(html);
    

    以上述代码为例进行解释:

    • 步骤一: 获取模板的内容放入到tpl中,这里$("#myTemplate")中填入的内容为你在上一步创建模板中所用的id.
      • type提醒: 这里我使用的jQuery的选择器获取,当然,你可以使用原生javascript的DOM选择器获取,例如:docuemnt.getElementById('myTemplate')和document.querySelector('#myTemplate')
    • 步骤二: 使用Handlebars.compile()方法进行预编译,该方法传入的参数即为获取到的模板
    • 步骤三: 使用template()方法进行编译后得到拼接好的字符串,该方法传入的参数即为上一步预编译的模板.
    • 步骤四: 将编译好的字符串插入到你所希望插入到的html文档中的位置,这里使用的是jQuery给我们提供的html()方法.同样,你也可以使用原生的innerHTML

    四.案例演示

    以下面的慢慢买网站为例,该项目中的手机列表,是通过Ajax动态获取的,我们不可能在html文档中写入全部的手机列表代码,这是不可能的.所以我们需要通过Handlebars来帮我们将后台传递过来的数据动态的显示到html文档中.


    列表图片

    1. 在HTML中引入:Handlebars,jQuery和本页的Js代码

    <script src="./lib/bootstrap/js/jquery-3.2.1.js"></script> //Handlebars
    <script src="./js/handlebars-1.0.0.beta.6.js"></script> //jQuery
    <script src="./js/product.js"></script>  //本页的Js代码
    

    2. 创建模板

    在未插入模板的情况下,页面显示如下,现在我们来使用Handlebars让数据动态的显示在网页上.


    空数据
    <!--定义模板 -->
        <script type="text/template" id="product-list-tepl">
            {{#each result}} 
            <li>
                <a href="#">
                    <div class="product-img">
                        {{{productImg}}}
                    </div>
                    <div class="product-text">
                        <h5>
                            {{productName}}
                        </h5>
                        <p>{{productPrice}}</p>
                    </div>
                    <div class="other">
                        <span>{{productQuote}}</span>
                        <span>{{productCom}}</span>
                    </div>
                </a>
            </li>
            {{/each}}
        </script>
    

    以上模板中的{{#}}为Handlebars的helper语法,可以实现Javascript中的逻辑和循环运算.更多使用方法可以参考: http://www.ghostchina.com/introducing-the-handlebars-js-templating-engine/

    3. 在JS代码中编译模板

    //定义getList()函数来发送Ajax请求,传递的参数为后台给的接口文档中定义的参数
    function getList(categoryId,pageid){
        //调用jQuery的Ajax()方法来发送Ajax请求
        $.ajax({
            type:'get',
            url:'http://182.254.146.100:3000/api/getproductlist',
            data:{
                pageid:pageid||1,
                categoryid:categoryId
            },
            success:function(data){
                //用zepto获取模板
                var tpl   =  $("#product-list-tepl").html();
                //预编译模板
                var template = Handlebars.compile(tpl);
                //匹配json内容
                var html = template(data);
                //插入模板,到ul中
                $('.product-list ul').html(html);
            }
        })
    }
    
    //入口函数
    $(function(){
        //获取到查询字符串的id
        var categoryId = Number(GetQueryString("categoryid"));  //getQueryString()是获取上一步传递过来的查询字符串的方法
        //调用定义的getList()获取手机列表
        getList(categoryId);
    })
    
    //获取上一步传递过来的查询字符串的方法
    function GetQueryString(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return unescape(r[2]);
        return null;
    }
    

    4. 插入模板后的页面如下

    使用Handlebars后的页面

    通过上面的案例,我相信大家应该能够明白模板引擎的强大,我们只需要在页面中写好一个手机列表的HTML代码,即可动态获取后台传递过来的所有信息,从而在页面中进行展示.

    注意: 在实际开发中,我们通过Ajax发送请求时所需要传递的参数,和获取到的JSON或其他格式的数据.皆是需要通过后台给定的接口文档为准.

    相关文章

      网友评论

          本文标题:模板引擎-Handlebars的实际项目

          本文链接:https://www.haomeiwen.com/subject/udmunftx.html