Bagaimana menemukan panjang Array di dalam template Handlebar?

87

Saya memiliki template Handlebars yang dirender menggunakan objek json. Dalam json ini saya mengirimkan sebuah array. Seperti ini:

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

Sekarang di template saya, saya ingin mencari panjang array ini. Sesuatu seperti:

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

Tidak dapat menemukannya di dokumentasi Handlebars.

Abhidev
sumber

Jawaban:

189

Salahku....

{{array.length}}sebenarnya berfungsi di dalam template. Seharusnya sudah diperiksa / diuji sebelum mempostingnya di sini.

Abhidev
sumber
37
baik, Anda menyelamatkan saya dari keharusan untuk mengujinya, jadi terima kasih. :)
Perry Tew
8
Ini tidak bekerja setidaknya untuk rasa setang Mandrills bagi siapa pun yang bertanya-tanya. Saya belum menemukan pengganti yang cocok.
oneirois
44

Dalam hal ini Anda perlu mereferensikan variabel induk dari masing-masing dari dalam setiap blok:

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

Saya pikir variabel Anda diberi nama "array" mungkin juga menggabungkan masalah. Mari kita asumsikan beberapa JSON berbeda hanya untuk memperjelas:

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

Jadi lakukan ini:

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

Akan menghasilkan:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>
Kevin Powell
sumber
1
Saya pikir item daftarnya adalahapple 0 3 orange 1 3 banana 2 3
Paul
@Paul, Anda benar, contoh diperbarui untuk mencerminkan keluaran yang benar.
Kevin Powell
Pertanyaan terkait: bagaimana Anda mendapatkan panjang array jika itu adalah nilai pipeline saat ini?
Gyscos
Secara sintaksis, jawaban ini lebih masuk akal daripada jawaban yang diterima.
Neil Monroe
Ini adalah jawaban yang bagus dan harus dipilih sebagai jawaban yang benar!
Aditya Rao
2

Anda dapat menentukan helper sederhana untuk menanganinya:

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

Dan kemudian gunakan di template Anda misalnya:

{{get_length some_object}}
gesiud
sumber
2

Jika Anda menguji daftar kosong untuk menampilkan konten ... Di Ember.js yang menggunakan setang, Anda dapat memiliki yang lain untuk #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Epirocks
sumber