2013-07-18 11 views
11

Come posso accedere a un elemento di matrice all'interno del modello di manubri utilizzando una variabile anziché un valore di hardcoded? ho bisogno di fare qualcosa di simile:Accesso all'array manubri con indice dinamico

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

al momento non mi dà un errore di analisi, ma il tempo di esecuzione non mi tornare nulla. se faccio qualcosa di simile:

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

funziona ma non è quello che sto cercando

+0

Hai trovato qualche soluzione? Sono bloccato sullo stesso problema. – Mathieu

risposta

9

correlati a my answer on another question


È possibile utilizzare the built-in lookup helper:

l'helper al lookup bassi per la risoluzione dinamica dei parametri usando le variabili Handlebars. Questo è utile per risolvere i valori per gli indici di array.

Utilizzando lookup, il tuo esempio potrebbe essere scritto come

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

(Si noti che senza la conoscenza della struttura dei dati, sto facendo un presupposto circa la posizione di App.ops.)

+0

Questa dovrebbe essere la risposta accettata – Jivan

0

È necessario creare un aiuto per il vostro problema. Di seguito è riportata la soluzione di esempio al problema utilizzando i valori dell'indice. Se vuoi usare alcune condizioni puoi farlo anche tu.

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 ""; 
}); 

allora si può fare qualcosa di simile

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

È possibile scrivere un semplice aiutante solo per ottenere valore dalla matrice

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

e poi utilizzarlo in modello come

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

../this riferimenti a oggetto esterno corrente e this - a corrente voce interiore

Esempio di dati provenienti da modello:

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