Ember

2016-11-07 22 views
5

Dizileri Dizisi ile Döngü Ember yineleme hakkında yeni biraz ve kafası karıştı.Ember

ben gibi, kor şablonu içinde bir seçme inşa etmeye çalışıyorum: Burada

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

, stateArrays benziyor:

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

Fakat, bu hatayı atar. {{stateArray}}'u denediğimde, "1, Albama" ...

Yukarıdaki tek tek yineleme nasıl elde edilir?

cevap

1

nesnelere bir diziye diziler dizi dönüştürebilirsiniz: Temelde biz şablonda stateArray[0] gibi sözdizimi kullanamazsınız

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

:

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

Sonra olarak kullanabilirsiniz.

GÜNCELLEME

başka dizi (mappedArray) oluşturmak istemiyorsanız, bir yardımcı yazabilirsiniz: Şablonunuzdaki Sonra

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

:

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

Bu tekniği sevdiğimden değil, bu

gibi bir dizideki elemanlara erişebilirsiniz
{{#each stateArrays as |stateArray|}} 
    <option value={{stateArray.[0]}}>{{stateArray.[1]}}</option> 
    {{/each}} 

Twiddle

ekstra kod yazmak zorunda kaydeder.

+1

Bu işlevsellik hakkında aynı şeyi düşünüyordum. Kullanmak gerçekten çok tuhaftır, ama bir Ember uygulamasına herhangi bir kod eklemeden diziye özgü bir öğeye erişmek için en basit tekniktir. Bunun herhangi bir örneğini Ember web sitesinde bulamadım, ancak bu konuda herhangi bir resmi referansı biliyor musunuz? – damienc

+0

Hayır, üzgünüm. Hızlı bir bakış attı, ancak dokümanlardaki hiçbir şeyi göremedim. Github gibi resmi kanallarda buna çok atıfta bulunuluyor, ancak sadece geçiyor. – JonRed