Handlebars模板引擎中的each用法(type=“text/x-handlebars-template“)

**

handlebar

**
概述与介绍

  • Handlebars 是 JavaScript
    一个语义模板库,通过对view和data的分离来快速构建Web模板。它采用"Logic-less template"(无逻辑模版)的思路,在加载时被预编译,而不是到了客户端执行到代码时再去编译, 这样可以保证模板加载和运行的速度。
  • 简单的说就是:Handlebars是一个很好的前后端的分离的方案

使用
Handlebars的安装是比较简单和方便的;handlebars是一个纯JS库,因此你可以像使用其他JS脚本一样用script标签来包含handlebars.js

handlebars的出现,解决了远古时期,使用字符串拼接标签的尬局,而handlebars作为模板引擎,将html结构固化,数据以变量的形式代替,这样html更容易维护,开发更方便,这种开发模式也导致前端mvc框架的出现。

<script src="jquery.min.js"></script>
<script type="text/javascript" src=".js/handlebars.js"></script>  

handlebar模板引擎中的each用法

适用场景:循环遍历数组显示渲染数据
html中:

<div class="list-box">
      <ul id="goodsBox">
        <!--   <li>
                    <img src="img/barcode.png" alt="">
                    <div class="right-wrap">
                        <p class="title">小新青春版14.0英寸轻薄笔记本</p>
                        <div class="des-box">
                            <p class="des">酷睿i7-8565U/Windows 10 家庭中文版/14.0英寸/8G</p>
                            <div class="btn-recommand">立即推荐</div>
                        </div>
                        <div class="price-des">¥5099</div>
                    </div>
                </li> -->
      </ul>
      <div class="btn-more-des">
        <a href="javascript:void(0)" class=""></a>
      </div>
    </div>
 <script id="hbsGoodsList" type="text/x-handlebars-template">
        {
   
   {#each this}}
            <li data-pcurl="{
   
   {pcDetailUrl}}" data-wapurl="{
   
   {wapDetailUrl}}">
                <div class="left-wrap">
                  <img src="{
   
   {imageUrl}}" alt="">
                  {
   
   {#resource_name is_mark}}{
   
   {/resource_name}}
                  <!-- <div class="good-source">其他通路货源</div> -->
                </div>
                <div class="right-wrap">
                    <p class="title">{
   
   {
   
   {name}}}</p>
                    <div class="des-box">
                        <p class="des">{
   
   {
   
   {statement}}}</p>
                        <div class="btn-recommand"  data-name="{
   
   {name}}" data-des="{
   
   {statement}}" data-img="{
   
   {imageUrl}}" data-price="{
   
   {price}}" data-gooid="{
   
   {itemId}}">立即推荐</div>
                        <div class="creathaibao" data-name="{
   
   {name}}" data-des="{
   
   {statement}}" data-img="{
   
   {imageUrl}}" data-price="{
   
   {price}}" data-gooid="{
   
   {itemId}}">生成海报</div>
                    </div>
                    <div class="price-des">¥{
   
   {price}}</div>
                </div>
            </li>
        {
   
   {/each}}
    </script>

js中

  function fetchGoodsList(value) {
      api.ajaxApi({
        url: api.apihref + 'paas/searchGoodsList',
        type: 'get',
        newjoggle: true,
        data: {
          keyword: value,
          pageNum: _page,
        }
      }).done(function (res) {
        if (res.status_code == 200) {
        //请求接口成功之后将数据通过Handlebars循环遍历渲染到页面上
          var tpl = Handlebars.compile($('#hbsGoodsList').html());
          var html = tpl(res.data.data);
          $('#goodsBox').append(html); // 尾部添加
        }
      }).always(function () {
        lnv.destroyloading(); // 上划加载
      })
    }

传参解析:

<div class="btn-recommand"  data-name="{
   
   {name}}" data-des="{
   
   {statement}}" data-img="{
   
   {imageUrl}}" data-price="{
   
   {price}}" data-gooid="{
   
   {itemId}}">立即推荐</div>
  • data-name="{ {name}}" { {name}}指的是返回数据数组中对象的字段
  • 可以在js文件中通过 $(’.btn-recommand’).data(‘name’)来获取到

猜你喜欢

转载自blog.csdn.net/lqlq54321/article/details/114027240