2016-11-07 15 views
5

Jestem trochę nowy i zagubiony odnośnie iteracji Ember.Zapętlanie się przez tablicę tablic w Emberzie

próbuję skonstruować wybierz wewnątrz szablonu ember, jak:

<select id="state_list"> 
    {{#each stateArrays as |stateArray|}} 
    <option value={{stateArray[0]}}>{{stateArray[1]}}</option> 
    {{/each}} 
</select> 

Tutaj, stateArrays wygląda następująco:

[[1, "Alabama"], [2, "Alaska"], [3, "Arizona"]] 

Ale to wyrzuca błąd. Kiedy próbuję {{stateArray}}, otrzymuję ciąg znaków taki jak "1, Albama" ...

Jak osiągnąć powyższe w pojedynczej iteracji?

Odpowiedz

1

można przekonwertować tablicy tablic na tablicę obiektów:

mappedArray = [[1, "Alabama"], [2, "Alaska"], [3, "Arizona"]].map(function(array){ 
    return { num: array[0] , str: array[1] }; 
}) 

Wtedy można go używać jako:

<select id="state_list"> 
    {{#each mappedArray as |obj|}} 
     <option value={{obj.num}}>{{obj.str}}</option> 
    {{/each}} 
</select> 

Zasadniczo nie możemy użyć składni jak stateArray[0] w szablonie.

UPDATE

Jeśli nie chcesz, aby utworzyć kolejną tablicę (mappedArray), można napisać pomocnika:

App.GetArrayItemHelper = Ember.Helper.helper(function(values) { 
    var array = values[0], index = values[1]; 
    return array[index]; 
}) 

Następnie w szablonie:

<select id="state_list"> 
    {{#each stateArrays as |stateArray|}} 
     <option value={{get-array-item stateArray 0}}>{{get-array-item stateArray 1}}</option> 
    {{/each}} 
</select> 
2

Nie, żebym uwielbiał tę technikę, ale możesz uzyskać dostęp do poszczególnych elementów w takiej tablicy:

{{#each stateArrays as |stateArray|}} 
    <option value={{stateArray.[0]}}>{{stateArray.[1]}}</option> 
    {{/each}} 

Twiddle

Oszczędność konieczności pisania dodatkowego kodu.

+1

Myślałem o tej samej funkcji. Jest naprawdę dziwne w użyciu, ale jest najprostszą techniką uzyskiwania dostępu do elementu specyficznego dla macierzy bez dodawania jakiegokolwiek kodu do aplikacji Ember. Nie mogłem znaleźć żadnego przykładu na stronie Ember, ale czy znasz oficjalne referencje na ten temat? – damienc

+0

Nie, nie mogę przepraszać. Miałem szybkie spojrzenie, ale nie widziałem niczego w dokumentach. Mnóstwo odniesień do tego w oficjalnych kanałach, takich jak Github, ale tylko na marginesie. – JonRed

Powiązane problemy