讓我明白又糊涂的handlebars(二)

6月25日恢口,尋游json挖下的坑


心中潛藏的固執(zhí)終于爆發(fā)孝宗,因為開始于楊元的博客,固執(zhí)于每一次渲染開始于循環(huán)耕肩、結(jié)束于循環(huán)因妇。進(jìn)入了一個關(guān)于json格式的死循環(huán),還不愿意醒猿诸,重復(fù)自己模擬json婚被、取json,但是就是不愿意在自己得到的json中去直接查找直接渲染梳虽。真是執(zhí)著于一個不怎么好的實現(xiàn)址芯,還沾沾自喜,認(rèn)為自己發(fā)現(xiàn)了無人的小角落窜觉,殊不知是一個路旁的可見底的涵洞谷炸,探之無味。

handlebars函數(shù)方法


前一章對handlebars使用的一些思想進(jìn)行了介紹禀挫,這里是承接它對handlebars的使用進(jìn)行一些補充旬陡,不能保證全面,但是我會堅持不斷發(fā)現(xiàn)语婴,不斷補充季惩,完善handlebars的使用录粱。

  • handlebars大的使用前奏-三點
  1. 引用庫
<script src="jquery/jquery.js"></script>
<script src="handlebars/handlebars-v3.0.1.js"></script>
  1. 頁面數(shù)據(jù)渲染與實現(xiàn)
<script id ="table-template" type="text/x-handlebars-template">
{{data}}
</script>
  1. 相應(yīng)js獲取json并渲染(一般使用ajax)
 <script src="handle.js"></script>
var data = {"data":"data"};
var myTemplate = Handlebars.compile($("#table-template").html());
$('body').html(myTemplate(data));
//這里利用jquery實現(xiàn)對handlebars的編譯與頁面的實現(xiàn)
var source = "<p>Hello, my name is {{name}}. I am from {{hometown}}. I have " + 
"{{kids.length}} kids:</p>" + 
"<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>"; 
var template = Handlebars.compile(source); 
var data = { "name": "Alan", "hometown": "Somewhere, TX", 
"kids": [{"name": "Jimmy", "age": "12"}, {"name": "Sally", "age": "4"}]}; 
var result = template(data);
  • handlebars正式使用的語句
  1. 注釋
    不能使用其他的注釋方法:// /**/等,在handlebars都會報錯画拾,只能用
{{! 這是一個注釋}}
{{!-- 一起消失吧--}}
  1. handlebars表達(dá)式
    很多時候啥繁,我們只需要從后臺獲取數(shù)據(jù),然后將數(shù)據(jù)放在對應(yīng)頁面中青抛,那么就會存在循環(huán)旗闽、判斷等情況,但是通過前面的直接進(jìn)入數(shù)據(jù)是不行的蜜另,所以我們就有了Block表達(dá)式适室,對某些事情進(jìn)行更深入的操作。
    一般形式為:{{# blockdemo}}開始到{{/blockdemo}}結(jié)束举瑰。通過一些邏輯操作來進(jìn)行block的定義與使用捣辆。
  2. handlebars的內(nèi)置塊表達(dá)式(Block helper)
  • each block helper === 即循環(huán),遍歷出列表內(nèi)容此迅,用this來引用遍歷的元素
<ul> 
     {{#each name}} 
     <li>{{this}}</li> 
     {{/each}}
</ul> 

對應(yīng)的json

    { name: ["html","css","javascript"]};
  • if else block helper == 即if/else語句
    使用{{#if}}汽畴、{{#else}} {{/if}}等進(jìn)行渲染,如:
{{#if list}}
<ul id="list">
     {{#each list}} 
    <li>{{this}}</li>
     {{/each}}
</ul> 
{{else}} 
   <p>{{error}}</p>
{{/if}}
var data = {
           info:['HTML5','CSS3',"WebGL"], 
           "error":"數(shù)據(jù)取出錯誤"
}
  • unless block helper== 與if相反使用即可耸序,如:
{{#unless data}}
<ul id="list"> 
    {{#each list}} 
      <li>{{this}}</li>
     {{/each}}
</ul>
 {{else}} 
    <p>{{error}}</p>
{{/unless}}
  • with block helper == 會在編譯的階段的時候進(jìn)行context傳遞和賦值,用with我們可以很簡單的進(jìn)入一個數(shù)據(jù)集合里面忍些,查找對應(yīng)的數(shù)據(jù)很方便,如:
<div class="entry">
     <h1>{{title}}</h1> 
      {{#with author}}
      <h2>By {{firstName}} {{lastName}}</h2>  
       {{/with}}
  </div> 
{ 
  title: "My first post!",
  author: {
     firstName: "Charles",
     lastName: "Jolley"
     }
}
  1. handlebars自定義標(biāo)簽
    handlebars的自定義標(biāo)簽可以使用在Handlebars模板的任何地方坎怪,必須使用Handlebars.registerHelper即注冊helper罢坝,用一個簡單的例子來講解:
Handlebars.registerHelper('fullName', function(person) {
 return person.firstName + " " + person.lastName;});

使用情景:

<div class="post"> 
    <h1>By {{fullName author}}</h1>
     <div class="body">{{body}}</div> 
    <h1>Comments</h1> 
   {{#each comments}} 
   <h2>By {{fullName author}}</h2>
   <div class="body">{{body}}</div> 
    {{/each}}
</div>

數(shù)據(jù):

var context = { 
    author: {
            firstName: "Alan", 
            lastName: "Johnson"}, 
            body: "I Love Handlebars", 
            comments: [{ 
                author: {
                       firstName: "Yehuda", 
                       lastName: "Katz"}, 
                        body: "Me too!" 
                }
     ]};

結(jié)果:

<div class="post"> 
      <h1>By Alan Johnson</h1> 
      <div class="body">I Love Handlebars</div> 
      <h1>Comments</h1> 
      <h2>By Yehuda Katz</h2> 
      <div class="body">Me Too!</div>
</div>

注:在自定義標(biāo)簽的helper中可以使用this,this是當(dāng)前的對象搅窿。

  1. handlebars訪問路徑(Path)
    handlebars支持路徑嘁酿,可以使用嵌套的路徑,能夠查找嵌套低于當(dāng)前上下文的屬性:
.    訪問屬性
../  訪問父屬性

如:

{
    title: "My First Blog Post!",
    author: { 
        id: 47, 
        name: "Yehuda Katz"
     }, 
    body: "My first post. Wheeeee!" 
};

訪問情況

<h1>{{author.id}}</h1> 
 {{#with author}} 
 <h1>{{../title}}</h1>
 {{/with}}
  1. 其他注意點
  • {{}}與{{{}}}男应,{{}}會將所有的內(nèi)容解析并轉(zhuǎn)義痹仙,{{{}}}不會對html內(nèi)容進(jìn)行操作,這樣我們需要的html就可以保全殉了,但是必須保證html中無""(改成 ' '),還有不能有換行等开仰,這樣會報錯
  • 還有與volicity有一個沖突的過程,需要注意薪铜。
    這就是我要說的詳細(xì)內(nèi)容众弓,缺少請指正,以便及時更新隔箍,及時補充谓娃。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜒滩,隨后出現(xiàn)的幾起案子滨达,更是在濱河造成了極大的恐慌奶稠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捡遍,死亡現(xiàn)場離奇詭異锌订,居然都是意外死亡,警方通過查閱死者的電腦和手機画株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門辆飘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谓传,你說我怎么就攤上這事蜈项。” “怎么了续挟?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵紧卒,是天一觀的道長。 經(jīng)常有香客問我诗祸,道長跑芳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任贬媒,我火速辦了婚禮聋亡,結(jié)果婚禮上肘习,老公的妹妹穿的比我還像新娘际乘。我一直安慰自己,他們只是感情好漂佩,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布脖含。 她就那樣靜靜地躺著,像睡著了一般投蝉。 火紅的嫁衣襯著肌膚如雪养葵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天瘩缆,我揣著相機與錄音关拒,去河邊找鬼。 笑死庸娱,一個胖子當(dāng)著我的面吹牛着绊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熟尉,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼归露,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斤儿?” 一聲冷哼從身側(cè)響起剧包,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤恐锦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疆液,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體一铅,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年枚粘,在試婚紗的時候發(fā)現(xiàn)自己被綠了馅闽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡馍迄,死狀恐怖福也,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情攀圈,我是刑警寧澤暴凑,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站赘来,受9級特大地震影響现喳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犬辰,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一嗦篱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幌缝,春花似錦灸促、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至轿偎,卻和暖如春典鸡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坏晦。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工萝玷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昆婿。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓球碉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挖诸。 傳聞我的和親對象是個殘疾皇子汁尺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • http://segmentfault.com/a/1190000000342636?from=androidqq...
    江火漁楓閱讀 9,038評論 1 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)多律,斷路器痴突,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 本文是對 MagicalRecord github上的翻譯 正文:注意: MagicalRecord 在 ARC...
    騂躍神話閱讀 1,997評論 1 5
  • 媽搂蜓,即便不是生身母,卻撿回了自己的命辽装,蓮子懷著感恩的心情思忖著帮碰。作為一個毫不相干的沒有血緣的人,將自己視如己出拾积,養(yǎng)...
    夢谷閱讀 208評論 0 1
  • 這個世界上殉挽,太多的事情無法定義。但假如你不是真的愛我拓巧,就不要裝作懂我的樣子接近我斯碌。 1 假如你不懂我 請不要對我說...
    我吃西蘭花閱讀 849評論 9 11