Wie finde ich die Array-Länge in den Lenker-Vorlagen?


86

Ich habe eine Lenkervorlage, die mit einem JSON-Objekt gerendert wird. In diesem JSON sende ich ein Array. So was:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

Jetzt möchte ich in meiner Vorlage die Länge dieses Arrays ermitteln. Etwas wie:

{{#each item}}
   {{ array.length }}
{{/each}}

Es konnte nicht in der Dokumentation zum Lenker gefunden werden.

Antworten:


186

Mein Fehler....

{{array.length}}tatsächlich innerhalb der Vorlage gearbeitet. Sollte es überprüft / getestet haben, bevor es hier veröffentlicht wird.


35
Nun, du hast mich davor bewahrt, es ausprobieren zu müssen, also danke. :)
Perry Tew

8
Dies funktioniert zumindest nicht für Mandrills Lenkergeschmack für alle, die sich fragen. Ich habe noch keinen geeigneten Ersatz gefunden.
Oneirois

43

In diesem Fall müssen Sie die übergeordnete Variable von jedem innerhalb jedes Blocks referenzieren:

{{#each array}}
    {{../array.length}}
{{/each}}

Ich denke, dass Ihre Variable mit dem Namen "Array" wahrscheinlich auch das Problem in Konflikt bringt. Nehmen wir zur Verdeutlichung einen anderen JSON an:

var json = {
    "fruit":["apple","orange","banana"]
};

Also dann mach das:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

Ergäbe:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>

1
Ich denke, die Listenelemente wärenapple 0 3 orange 1 3 banana 2 3
Paul

@Paul, Sie sind korrekt, Beispiel aktualisiert, um die korrekte Ausgabe wiederzugeben.
Kevin Powell

Verwandte Frage: Wie erhält man die Länge eines Arrays, wenn es der aktuelle Pipeline-Wert ist?
Gyscos

Syntaktisch ist diese Antwort sinnvoller als die akzeptierte Antwort.
Neil Monroe

2

Sie können einen einfachen Helfer definieren, um damit umzugehen:

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

Und dann verwenden Sie es in Ihrer Vorlage, zB:

{{get_length some_object}}

1

Wenn Sie nach einer leeren Liste suchen, um Inhalte anzuzeigen ... In Ember.js, das Lenker verwendet, können Sie für #each ein anderes angeben.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.