2013-07-18 17 views
11

Jak uzyskać dostęp do elementu tablicy w szablonie kierownicy za pomocą zmiennej zamiast wartości zakodowanej na stałe? muszę zrobić coś takiego:Dostęp do tablicy kierownicy z indeksem dynamicznym

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

w tej chwili nie daje mi błąd składniowy ale na starcie nie zwróci mi nic. jeśli zrobię coś takiego:

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

to działa, ale to nie to, czego szukam

+0

Czy znalazłeś jakieś obejście? Utknąłem w tym samym problemie. – Mathieu

Odpowiedz

9

Związany my answer on another question


Można wykorzystać the built-in lookup helper:

Pomocnik lookup minimalne parametry dynamicznego rozwiązywania parametrów za pomocą zmiennych Handlebars. Jest to przydatne przy rozwiązywaniu wartości indeksów tablicowych.

Korzystanie lookup, Twój przykład można zapisać jako

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

(Zauważ, że bez znajomości struktury danych, robię założenie o lokalizacji App.ops.)

+0

To powinna być zaakceptowana odpowiedź – Jivan

0

Musisz utworzyć pomocnika dla swojego problemu. Poniżej znajduje się przykładowe rozwiązanie twojego problemu za pomocą wartości indeksu. Jeśli chcesz użyć pewnych warunków, możesz to zrobić.

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

Następnie można zrobić coś takiego

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

można napisać prosty pomocnika tak aby uzyskać wartości z tablicy

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

a następnie używać go w szablonie jak

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

../this odniesienia do aktualnej zewnętrznej pozycji, a this - do bieżącego elementu wewnętrznego

przykładzie danych pochodzących do szablonu:

{ 
    outer: { 
     1: { foo: "foo value" }, 
     2: { bar: "bar value" } 
    }, 
    inner: { 
     1: { label: "foo" }, 
     2: { label: "bar" } 
    } 
} 
Powiązane problemy