Làm cách nào để tìm độ dài Mảng bên trong các mẫu của Handlebar?


86

Tôi có một mẫu Handlebars được hiển thị bằng cách sử dụng một đối tượng json. Trong json này, tôi đang gửi một mảng. Như thế này:

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

Bây giờ trong mẫu của tôi, tôi muốn tìm độ dài của mảng này. Cái gì đó như:

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

Không thể tìm thấy nó trong tài liệu Handlebars.

Câu trả lời:


189

Lỗi của tôi....

{{array.length}}thực sự đã hoạt động bên trong mẫu. Nên đã kiểm tra / thử nghiệm nó trước khi đăng nó ở đây.


36
tốt, bạn đã giúp tôi không phải kiểm tra nó, vì vậy cảm ơn. :)
Perry Tew

8
Điều này không hiệu quả ít nhất đối với hương vị ghi đông Mandrills cho bất kỳ ai đang thắc mắc. Tôi vẫn chưa tìm được người thay thế phù hợp.
oneirois

43

Trong trường hợp này, bạn cần tham chiếu đến biến cha của mỗi biến từ bên trong mỗi khối:

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

Tôi nghĩ rằng biến của bạn được đặt tên là "mảng" có lẽ cũng đang gây ra vấn đề. Hãy giả sử một số JSON khác nhau chỉ để làm rõ:

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

Vì vậy, sau đó làm điều này:

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

Sẽ mang lại:

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

1
Tôi nghĩ các mục trong danh sách sẽ làapple 0 3 orange 1 3 banana 2 3
Paul,

@Paul, bạn nói đúng, đã cập nhật ví dụ để phản ánh đúng đầu ra.
Kevin Powell

Câu hỏi liên quan: làm cách nào để bạn có được độ dài của một mảng khi nó là giá trị đường ống hiện tại?
Gyscos

Về mặt cú pháp, câu trả lời này có ý nghĩa hơn câu trả lời được chấp nhận.
Neil Monroe

2

Bạn có thể xác định trình trợ giúp đơn giản để xử lý nó:

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

Và sau đó sử dụng nó trong mẫu của bạn, ví dụ:

{{get_length some_object}}

1

Nếu bạn đang kiểm tra danh sách trống để hiển thị nội dung ... Trong Ember.js sử dụng thanh điều khiển, bạn có thể có một danh sách khác cho #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.