2012-08-09 10 views
7

Mögliche Duplizieren:
Mustache JS Template with JSON CollectionMustache.js: eine Liste iterieren über json erhielt

ich eine JSON-Antwort wie diese, die ich mit Mustache.js verwenden möchten:

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

Wie kann ich mit mustache.js darüber iterieren?

+0

Ich sehe nicht, wie es ein Duplikat ist. Weder der Titel der verknüpften Frage ist beschreibend, noch gibt es eine akzeptierte Antwort. – Stealth

+0

Die lustige Sache ist, der Beitrag, dass dies "ein Duplikat von" ist, verweist auf diese Frage. – Carcigenicate

Antwort

12

fand ich eine andere Art und Weise, dies zu tun, die ziemlich ähnlich ist Geert-Jan außer, dass Sie das Array in ein Javascript-Objekt nicht zuordnen.

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

Ja wirklich. Wusste nicht, dass der Punkt auch auf einem Top-Level-Objekt funktioniert hat. –

+0

Ich kann nicht scheinen, dass dies funktioniert mit I Can Haz. Gibt es etwas, das mir fehlt? – streetlight

+0

Ich kann nicht scheinen, dass dies funktioniert (ich benutze I Can Haz). Gibt es etwas, das mir fehlt, weil das großartig wäre? – streetlight

14

Das Array selbst einen Wert in einem größeren Objekt sein sollte, etwa so:

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

Dann können Sie tun:

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

die Verwendung für {{}} #bla tatsächlich überlastet . Wenn die Eigenschaft, auf die es einwirkt, ein Array ist, wird es eine Schleife bilden. Wenn die Eigenschaft selbst ein Objekt ist, wird sie dieses Objekt "betreten". Gegeben Ihr Beispiel:

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

Danke für Ihre Antwort. Ich habe auch einen anderen Weg gefunden, es einfacher zu finden. Siehe unten. – Stealth

+0

@ Geert-Jan danke es hat mir geholfen. Ich musste dies tun: '$ ('. Einige #selector'). Append (Moustache.render (someTemplateTpl, {arrayOfObjects: classObject.arrayOfJsons}));' so Array von Objekten namens _arrayOfJsons_ innerhalb der Klasse _classObject_ musste als Wert von _arrayOfObjects_ property inside Objekt zugewiesen werden. Aber früher, als ich diesen Code verwendet: '$ ('. Einige #selector'). Append (Moustache.render (someTemplateTpl, classObject.arrayOfJsons));' es hat nicht funktioniert, Vorlage wurde teilweise gerendert - nur statische HTML-Teile, aber dynamische, die auf Jsons Eigenschaften basieren (dh wenn - sonst wie Anweisungen) nicht. Warum? – spaffy