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.

Jawaban:


189

Salahku....

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


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>

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}}

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}}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.