Как найти длину массива внутри шаблонов Handlebar?


86

У меня есть шаблон Handlebars, который отображается с использованием объекта json. В этом json я отправляю массив. Как это:

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

Теперь в моем шаблоне я хочу найти длину этого массива. Что-то типа:

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

Не удалось найти в документации по Handlebars.

Ответы:


189

Моя вина....

{{array.length}}фактически работал внутри шаблона. Надо было проверить / протестировать его, прежде чем размещать здесь.


37
ну, ты спас меня от необходимости проверять это, так что спасибо. :)
Перри Тью

8
Это не работает, по крайней мере, для рулей Mandrills для всех, кому интересно. Пока не нашел подходящей замены.
oneirois

43

В этом случае вам нужно ссылаться на родительскую переменную каждого из каждого блока:

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

Я думаю, что ваша переменная с именем «массив», вероятно, также объединяет проблему. Давайте предположим какой-то другой JSON, чтобы уточнить:

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

Итак, сделаем это:

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

Дала бы:

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

1
Я думаю, что список пунктов будетapple 0 3 orange 1 3 banana 2 3
Пол

@Paul, вы правы, пример обновлен, чтобы отразить правильный результат.
Кевин Пауэлл,

Связанный вопрос: как получить длину массива, если это текущее значение конвейера?
Gyscos,

Синтаксически этот ответ имеет больше смысла, чем принятый ответ.
Нил Монро

2

Вы можете определить простой помощник для его обработки:

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

А затем используйте его в своем шаблоне, например:

{{get_length some_object}}

1

Если вы тестируете пустой список для отображения содержимого ... В Ember.js, который использует ручки, вы можете использовать else для #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.