Gidon şablonlarında Dizi uzunluğu nasıl bulunur?


87

Bir json nesnesi kullanılarak oluşturulan bir Gidon şablonum var. Bu jsonda bir dizi gönderiyorum. Bunun gibi:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

Şimdi şablonumda bu dizinin uzunluğunu bulmak istiyorum. Gibi bir şey:

{{#each item}}
   {{ array.length }}
{{/each}}

Gidon belgelerinde bulamadık.

Yanıtlar:


189

Benim hatam....

{{array.length}}aslında şablonun içinde çalıştı. Buraya göndermeden önce kontrol etmiş / test etmiş olmalı.


37
Pekala, beni test etme zorunluluğundan kurtardın, bu yüzden teşekkürler. :)
Perry Tew

8
Bu en azından merak eden herkes için gidonun Mandrills lezzeti için işe yaramıyor. Henüz uygun bir yedek bulamadım.
oneirois

44

Bu durumda, her bloğun içinden her birinin ebeveyn değişkenine başvurmanız gerekir:

{{#each array}}
    {{../array.length}}
{{/each}}

Sanırım değişkeninizin "dizi" olarak adlandırılması da sorunu muhtemelen karıştırıyor. Açıklığa kavuşturmak için bazı farklı JSON varsayalım:

var json = {
    "fruit":["apple","orange","banana"]
};

Öyleyse bunu yapmak:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

Verim verecek:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>

1
Sanırım liste maddeleri şöyle olurduapple 0 3 orange 1 3 banana 2 3
Paul

@Paul, haklısınız, örnek doğru çıktıyı yansıtacak şekilde güncellendi.
Kevin Powell

İlgili soru: mevcut ardışık düzen değeri olduğunda bir dizinin uzunluğunu nasıl elde edersiniz?
Gyscos

Sözdizimsel olarak, bu cevap kabul edilen cevaptan daha mantıklı.
Neil Monroe

Bu harika bir cevaptı ve doğru cevap olarak seçilmelidir!
Aditya Rao

2

İşlemek için basit bir yardımcı tanımlayabilirsiniz:

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

Ve sonra bunu şablonunuzda kullanın, örneğin:

{{get_length some_object}}

2

İçeriği görüntülemek için boş bir liste test ediyorsanız ... Gidon kullanan Ember.js'de #each için başka bir listeye sahip olabilirsiniz.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.