Handlebars嵌套及if判斷


作為一個新入行沒幾個月的菜鳥,這些日子寫了兩個不同的購物車。

對於購物車中物品的顯示用到了handlebars這個模塊引擎。

開始的時候對這個東西並不是很了解,經過前輩的講解以及自己查閱的資料。

發現了其實這個東西還是挺好用的,下面就是我遇到的兩種情況。

-------------------------------------------

第一種:其實就是簡單將購物車中的物品查出來並循環顯示出來。

這種情況用handlebars來完成感覺十分方便。

首先我們需要引用插件。

<script type="text/javascript" src="script/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="script/handlebar/1.3.0/handlebars.min.js"></script>
<script type="text/javascript" src="script/handlebar/1.3.0/helpers.js"></script>

//在JS中需要注冊一個handlebars模板

//$("#xx-template").html()是jquery語法。

var myTemplate = Handlebars.compile($("#xx-template").html());

//將json對象用剛剛注冊的Handlebars模板封裝,得到最終的html,插入到table中。

$("#xxlist").html(myTemplate(data));

//html中

顯示的地方為

<div id="xxlist">

  循環顯示下面id="xx-template"中的東西

<div>

id用來唯一的確定一個模塊,type中是固定寫法

<script id="xx-template" type="text/x-handlebars-template">

 {{#each data}}

  這里可以寫樣式,獲取字段等等

  獲取字段的格式為{{xx}}

  {{/each}}

</script>

-------------------------------------------

 

第二種:

這種相對來說比較復雜,

購物車中需要先把地址信息循環出來,

再在每一條地址信息下循環顯示出所對應的商品。

當想要放棄使用Handlebars的時候,

發現了這種嵌套的情況也可以是用的方法。

這種情況第一種循環的方式同上,

但是需要在each中嵌套each,

第二層本身就是一個信息列表,是屬於所有的,

我們先在第一層each中遍歷了所有地址,

然后再遍歷每個地址的商品信息,這樣就形成了each嵌套。

這個時候,{{xx}}的方法只能取到當前each中的數據,

如果想在內層each取到上層each的數據,可以使用{{../xx}}

 

-------------------------------------------

延伸擴展

在Handlebars中,if..else功能有嚴重的不足

這個時候也有很好的解決辦法

只需要注冊一個比較大小的Helper就可以了。

具體操作如下。

JS中:

var myTemplate = Handlebars.compile($("#xx-template").html());

  //在這里注冊一個比較大小的Helper,判斷x1是否大於x2

  Handlebars.registerHelper("compare",function(x1,x2,options){

    if(x1>x2){

      //滿足條件執行

      return options.fn(this);

    }else{

      //不滿足執行{{else}}部分

      return options.inverse(this);

    }

  });

$("#xxlist").html(myTemplate(data));

 

html中

<script id="xx-template" type="text/x-handlebars-template">

 {{#each data}}

   {{#if ...}}

    {{#compare ...}}

 

    {{else}}

 

    {{/compare}}

   {{/if}} 

  {{/each}}

</script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM