2014-03-28 37 views
0

我有這樣的對象:指數:值Mustache.js

{nodes: [ 
     { 
      node: { 
       actors: { 
        1: "Actor 1", 
        2: "Actor 2" 
       } 
      } 
     }] 

在我的鬍子模板,我想這和它的工作:

{{#actors}} 
    {{1}}<br /> 
    {{2}} 
{{/actors}} 

但我不知道我有多少演員,我需要像索引一樣的東西。似乎handlebars.js知道如何做到這一點,但我想使用Mustache.js。

+0

這個JSON的奇怪部分是'actors'不是數組嗎? – TheDude

+0

是的,它是一個對象;我只是明白這一點......但它也無助於我解決問題。 – elektrorl

+1

問題是你想要一種迭代所有對象屬性的方法。這是一個有效的問題,但您可以通過將'actors'視爲對象列表而不是對象來輕鬆解決此問題。小鬍子已經有能力遍歷列表。這個JSON來自外部服務器嗎? – TheDude

回答

1

我會改變JSON的格式,所以在這樣的:

"actors": [ {"name": "Actor 1"}, {"name": "Actor 2"}] 

然後,你可以做

{{#actors}} 
    {{name}} 
{{/actors}} 

如果你想使用車把,你可以指定這一個幫手:

Handlebars.registerHelper('eachProperty', function (context, options) { 
    var ret = ""; 
    for (var prop in context) { 
     if (prop) 
      ret = ret + options.fn(({ property: prop, value: JSON.stringify(context[prop]) })); 
    } 
    return ret; 
}); 

所以,當你想迭代一個對象的屬性,你可以這樣做:

{{#eachProperty actors}} 
    {{value}} 
{{/eachProperty}} 

另請注意,{{property}}會爲您提供該對象的索引值。

+0

當然,它將適用於此更改,但我未來無法控制我的JSON數據。 – elektrorl

+0

然後你應該考慮使用把手。我不認爲有一種方法可以實現你在小鬍子上的目標。你有什麼不喜歡使用把手的原因嗎? – TheDude

+0

它似乎更復雜,我甚至不知道如何解決這個問題。 – elektrorl