it-swarm.com.de

Handlebars.js: Wie kann ich auf den übergeordneten Index in verschachtelten Quellen zugreifen?

Wie kann in jeder Schleife auf den übergeordneten @ index-Wert zugegriffen werden?

Habe folgendes versucht:

{{#each company}}
{{#each employee}}
  {{../@index}} // how to access company index here?
{{/each}}
{{/each}}

Dies führt zu einem Fehler:

Erwartet 'ID', bekam 'DATA' 

41
Fdr

Im Beispiel liegt ein Syntaxfehler vor. Die korrekte Syntax lautet {{@../index}}.

Wir suchen nach Möglichkeiten, wie wir die benutzerdefinierte Benennung dieser Parameter in zukünftigen Versionen der Sprache unterstützen können. Dies ist einfacher zu handhaben mit . https://github.com/wycats/handlebars.js/issues/907

70
Kevin Decker

Das hat für mich funktioniert:

{{#each company}}
{{setIndex @index}}
{{#each employee}}
  {{../index}}
{{/each}}
{{/each}}

JS:

Handlebars.registerHelper('setIndex', function(value){
    this.index = Number(value + 1); //I needed human readable index, not zero based
});

Stellen Sie nur sicher, dass das company-Objekt keine index-Eigenschaft hat.

26
strah

Antwort:{{@../index}}

Von der Lenker docs (siehe unten in jedem Helfer-Abschnitt):

"Verschachtelte each-Blöcke können über abgeleitete Pfade auf die Interation-Variablen zugreifen. Für den Zugriff auf den übergeordneten Index kann beispielsweise {{@../index}} verwendet werden."

HINWEIS: Ich verwende Version 1.3, also ist es mindestens so alt.

ANMERKUNG: Helfer sind Ihre letzte beste Option. 9/10 gibt es eine bessere Lösung.

7
jordanb

Es scheint, als gäbe es in Ember v2.2.0 eine neue Syntax. Ich habe alle Antworten hier ausprobiert und sie funktionierten nicht für mich.

Was ich funktionierte, war das Benennen des Index der Elternschleife und des Index der Kinderschleife. 

{{#each parents as |parent parentIndex|}}
    {{parentIndex}}
    {{#each children as |child childIndex|}}
        {{parentIndex}}
        {{childIndex}}
    {{/each}}
{{/each}}
4
Andrew Toy

registrieren Sie eine Helper-Methode:

Handlebars.registerHelper('eachWithIndex', function(cursor, options) {
    var fn = options.fn, inverse = options.inverse;
    var ret = "";
    var idx = -1;
    //console.log(cursor);
    cursor.forEach(function(item){
        idx++;
        console.log(item.index);
        item.index = idx;
        ret+=fn(item);
    });
    return ret;
}); 

lenker Vorlage:

{{#eachWithIndex outer}}
  {{#each inner}}
   {{../index}} // access outer index like this. I used hanlebars V1.3.0
   {{index}} // access inner index
  {{/each}}
{{/eachWithIndex}}
0
Fish