2012-07-25 11 views
26

ich die folgende Logik mit dem Schnurrbart implementieren möchten:Moustache - Wie Array zu erkennen ist nicht leer?

{{#if users.length > 0}} 
    <ul> 
     {{#users}} 
      <li>{{.}}</li> 
     {{/users}} 
    </ul> 
{{/if}} 

// eg. data = { users: ['Tom', 'Jerry'] } 

Sollte ich die users Struktur modifizieren, um die Notwendigkeit zu erfüllen? Zum Beispiel:

{{#hasUsers}} 
    <ul> 
     {{#users}} 
      <li>{{.}}</li> 
     {{/users}} 
    </ul> 
{{/hasUsers}} 

// eg. data = { hasUsers: true, users: ['Tom', 'Jerry'] } 
+2

Ja, ich glaube, Sie gehen, um die Daten zu haben, zu modifizieren, wie Sie mit 'getan haben hasUsers'. Eine weitere Option ist die Verwendung der robusteren [Lenker] (http://handlebarsjs.com/), die diesen genauen Fall auf ihrer Homepage behandelt. – maxbeatty

Antwort

44

Entschuldigung, das könnte zu spät sein. Aber ich hatte ähnliche Anforderung und fand einen besseren Weg, dies zu tun:

{{#users.length}} 
    <ul> 
     {{#users}} 
      <li>{{.}}</li> 
     {{/users}} 
    </ul> 
{{/users.length}} 
{{^users.length}} 
    <p>No Users</p> 
{{/users.length}} 

Arbeitsprobe hier: http://jsfiddle.net/eSvdb/

+4

Bitte beachten Sie, dass dies keine Standard-Schnurrbartfunktion ist. Dies hängt von der Moustache-Implementierung ab. – corgrath

+0

Nie zu spät auf SO :) – jClark

+0

Ich kann bestätigen, wie @corgrath sagte, dass dies implementationsabhängig ist: es funktioniert nicht mit Samskivert Java Moustache-Bibliothek. – penguin86

17

Arbeiten mit {{# users.length}} funktioniert gut, wenn Sie die innere Aussage wollen wiederholen jedes Element des Arrays, aber wenn Sie nur eine Erklärung wollen nur einmal auszuführen, können Sie verwenden:

{{#users.0}} 
... 
{{/users.0}} 
{{^users.0}} 
... 
{{/users.0}} 
+5

dieser Weg funktioniert auch gut mit PHP, da Arrays keine Längeneigenschaft hat. – JacopKane

+1

Sicher funktioniert in Schnurrbart für PHP – Michael

+1

das ist die richtige Antwort – stewart715