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.

Abhidev
quelle

Antworten:

186

Mein Fehler....

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

Abhidev
quelle
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>
Kevin Powell
quelle
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}}
gesiud
quelle
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}}
Epirocks
quelle