Як знайти довжину масиву всередині шаблонів руля?


86

У мене є шаблон Handlebars, який відображається за допомогою об'єкта json. У цьому json я надсилаю масив. Подобається це:

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

Тепер у своєму шаблоні я хочу знайти довжину цього масиву. Щось на зразок:

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

Не вдалося знайти його в документації Handlebars.

Відповіді:


189

Моє ліжко....

{{array.length}}насправді працював усередині шаблону. Потрібно було перевірити / протестувати його перед розміщенням тут.


36
ну, ти врятував мене від необхідності перевіряти це, тож спасибі. :)
Perry Tew

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
Пол

@ Пол, ти маєш рацію, приклад оновлений, щоб відображати правильний результат.
Кевін Пауелл,

Пов’язане запитання: як отримати довжину масиву, коли це поточне значення конвеєра?
Гіскос

Синтаксично ця відповідь має більше сенсу, ніж прийнята відповідь.
Ніл Монро,

2

Ви можете визначити простий помічник для обробки:

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

А потім використайте його у своєму шаблоні, наприклад:

{{get_length some_object}}

1

Якщо ви тестуєте на порожній список для відображення вмісту ... У Ember.js, який використовує кермо, у вас може бути інше для #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.