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.