2013-07-18 3 views
11

Wie kann ich auf ein Array-Element innerhalb der Lenkervorlage zugreifen, indem ich eine Variable anstelle eines fest codierten Werts verwende? Ich brauche so etwas zu tun:Lenker-Array-Zugriff mit dynamischem Index

{{#each condition in conditions}} 
    {{App.ops.[condition.op].name}} 
{{/each}} 

im Moment nicht mir Fehler eines Parse nicht geben, aber auf der Laufzeit zurückgibt mir nicht nichts. Wenn ich so etwas tun:

{{App.ops.[1].name}} 

es funktioniert, aber es ist nicht das, was ich suche

+0

Haben Sie eine Problemumgehung gefunden? Ich stecke in demselben Problem fest. – Mathieu

Antwort

9

Verwandte zu my answer on another question


können Sie verwenden the built-in lookup helper:

Die lookup Helfer al Tiefen für dynamische Parameterauflösung mit Lenker Variablen. Dies ist nützlich zum Auflösen von Werten für Array-Indizes.

Mit lookup, Ihr Beispiel als

geschrieben werden konnte
{{#each condition in conditions}} 
    {{#with (lookup ../App.ops condition.op)}} 
     {{name}} 
    {{/with}} 
{{/each}} 

(Beachten Sie, dass ohne Kenntnis der Struktur Ihrer Daten, ich bin eine Annahme über die Lage von App.ops zu machen.)

+0

Dies sollte die akzeptierte Antwort sein – Jivan

0

Sie benötigen einen Helfer für Ihr Problem zu schaffen. Im Folgenden finden Sie die Beispiellösung für Ihr Problem mit Indexwerten. Wenn Sie einige Bedingungen verwenden möchten, können Sie das auch tun.

Handlebars.registerHelper("each_with_index", function(array, options) { 
    if(array != undefined && array != null && array.length > 0){ 
     var html = new StringBuffer(); 
     for (var i = 0, j = array.length; i < j; i++) { 
      var item = array[i]; 
      item.index = i+1; 

      // show the inside of the block 
      html.append(options.fn(item)); 
    } 

    // return the finished buffer 
    return html.toString(); 
} 
return ""; 
}); 

Dann können Sie so etwas wie dieses

{{#each_with_index condition in conditions}} 
    {{App.ops.[condition.index].name}} 
{{/each_with_index}} 
3
tun

Sie einen einfachen Helfer schreiben kann nur Wert erhalten von Array

Handlebars.registerHelper('getmyvalue', function(outer, inner) { 
    return outer[inner.label]; 
}); 

und es dann in Vorlage zu verwenden, wie

{{#each outer}} 
    {{#each ../inner}} 
     {{getmyvalue ../this this }} 
{{/each}} 

../this Verweise auf aktuelle äußere Element und this - den aktuellen inneren Element

Beispiel Datenvorlage kommen:

{ 
    outer: { 
     1: { foo: "foo value" }, 
     2: { bar: "bar value" } 
    }, 
    inner: { 
     1: { label: "foo" }, 
     2: { label: "bar" } 
    } 
} 
Verwandte Themen