2012-08-09 9 views
7

Powiel możliwe:
Mustache JS Template with JSON CollectionMustache.js: iteracyjne nad listy odebranych za pośrednictwem json

mam odpowiedzi json tak, że chcę korzystać z Mustache.js:

[ 
    {"id": "1", "details": {"name": "X", "type":"Y" }}, 
    {"id": "2", "details": {"name": "aName", "type":"something" }} 
] 

Jak wykonać iterację przy użyciu pliku mustache.js?

+0

Nie widzę, jak to jest duplikat. Tytuł połączonego pytania nie jest opisowy ani nie ma zaakceptowanej odpowiedzi. – Stealth

+0

Zabawne jest to, że wpis, który jest "duplikatem", odnosi się do tego pytania. – Carcigenicate

Odpowiedz

12

Znalazłem inny sposób robienia tego, który jest podobny do Geert-Jan, z tym że nie musisz przypisywać tablicy do obiektu JavaScript.

{{ #. }} 
    <p> {{ id }} </p> 
    <ul> {{#details}} 
     {{name }} 
     {{ type }} 
    {{/details}} 
    </ul> 
{{ /. }} 
+0

Tak, rzeczywiście. Nie wiedziałem, że kropka działała również na obiekcie najwyższego poziomu. –

+0

Nie mogę sprawić, żeby to działało, używając I Can Haz. Czy jest coś, czego mi brakuje? – streetlight

+0

Nie mogę sprawić, żeby to działało (używam I Can Haz). Czy jest coś, czego mi brakuje, bo byłoby świetnie! – streetlight

14

Sama tablica powinna być wartość w większym obiektu, tak jak poniżej:

var obj = { 
    arr: [ 
    {"id": "1", "details": {"name": "X", "type":"Y" }}, 
    {"id": "2", "details": {"name": "aName", "type":"something" }} 
    ] 
} 

Następnie można zrobić:

{{#arr}} 
    my id: {{id}} 
{{/arr}} 

zastosowanie dla {{}} #bla faktycznie przeładowany . Kiedy właściwość, na którą działa, to tablica, którą zapętli. Gdy właściwość jest obiektem, to "wejdzie" w ten obiekt. Na twoim przykładzie:

{{#arr}} 
    my id: {{id}} <br/> 
    {{#details}} 
    and my name: {{name}} 
    {{/details}} 
{{/arr}} 
+2

Dzięki za odpowiedź. Znalazłem też inny sposób na zrobienie tego, co może być łatwiejsze. Patrz poniżej. – Stealth

+0

@ Geert-Jan, dzięki, pomógł mi. Musiałem to zrobić: '$ ('. Some # selector'). Append (Mustache.render (someTemplateTpl, {arrayOfObjects: classObject.arrayOfJsons}));' , więc tablica obiektów o nazwie _arrayOfJsons_ wewnątrz klasy _classObject_ musiała być przypisane jako wartość _arrayOfObjects_ property wewnątrz obiektu. Ale wcześniej, kiedy użyłem tego kodu: '$ ('. Some someselector') .endend (Mustache.render (someTemplateTpl, classObject.arrayOfJsons));' to nie zadziałało, szablon został wyrenderowany częściowo - tylko części statyczne html, ale dynamiczne oparte na właściwościach JSONA (tj. instrukcje if-else like) nie były. Czemu? – spaffy

Powiązane problemy