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.