2012-09-06 76 views
0

如何加入JSON數據我有代表的意見流,就像一個JSON:使用Handlebars.js

var comments = [ 
    { "comment_id": 1, "author_id": 100, "text": "hello world!" }, 
    { "comment_id": 2, "author_id": 120, "text": "cheers world!" }, 
    { "comment_id": 3, "author_id": 100, "text": "goodmorning world!" }, 
    { "comment_id": 4, "author_id": 100, "text": "goodnight world!" } ] 

正如你可能會注意到,author_id 100評論三次。

我有我的author s的數據的另一個JSON,例如:

var authors = { 
    100: {"username": "ciccio"}, 
    120: {"username": "pernacchia"} } 

我想加入這兩個JSON而呈現模板,使用author_id關鍵仰視authors。這將是巨大的,有這樣一個幫手:

<div class="comments"> 
    <!-- `join` takes an iterable, a lookup dict, a key, 
      and a new name for the joined property --> 
    {{#join comments authors "author_id" "author"}} 
    <div class="Comment"> 
     {{author.username}} says: {{text}} 
    </div> 
    {{/join}} 
</div> 

我試着寫下助手這樣做,但我不明白如何引用內部的幫手authors字典

現在我手動連接兩個類型的字典,創建特設 JSON的模板。 但是,將這項工作委託給模板會很好。

回答

0

除非你會在代碼中的許多地方進行這種連接,否則我認爲不值得定義一個輔助函數。只要使用Javascript/JQuery的做到這一點:

$.each(comments, function(key, comment) { 
    var author_id = comment.author_id; 
    var comment_text = comment.text; 
    if (authors[author_id]) { 
     if (authors[author_id].text) { 
      authors[author_id].text = authors[author_id].text + " " + comment.text; 
     } else { 
      authors[author_id].text = comment.text; 
     } 
    } 
}); 

上面添加一個「文本」字段「作者」的記錄,所以在此之後,剛剛經歷「的作者」名單迭代。如果你真的很喜歡這個,你也可以把它轉換成一個輔助函數。

看到它的行動:http://jsfiddle.net/DUkFa/