Как получить доступ к последнему элементу в массиве Handlebars.js?

Учитывая следующую структуру данных:

{
    "name" : "test",
    "assetType" : "Home",
    "value" : [ 
        {
            "value" : "999",
            "date" : "10/03/2018"
        }, 
        {
            "value" : "1234.56",
            "date" : "10/04/2018"
        }
    ]
}

Как я могу получить прямой доступ к первому и последнему элементу value в Handlebars? Мой код:

<td>{{value.[0].value}}</td>
<td>{{value.[value.length - 1].value}}</td>

Первый оператор работает нормально, но я не могу понять, как получить доступ к последнему элементу. value.length внутри [] не возвращает никакого значения, но рендеринг value.length вне массива работает нормально.

Я пробовал использовать @first и @last в массиве, но они, похоже, тоже не работают.

🤔 А знаете ли вы, что...
Meteor - это современный фреймворк для разработки веб-приложений на JavaScript.


1
56
1

Ответ:

Решено

Как уже указывалось, вы можете легко решить эту проблему с помощью помощник по шаблону:

Template.myTemplate.helpers({
  first (arr) {
    return arr && arr[0]
  },
  last (arr) {
    return arr && arr[arr.length - 1]
  },
  atIndex (arr, index) {
    return arr && index >= 0 && index <= arr.length - 1 && arr[index]
  }
})

Затем вы можете создать контекст с помощью #with, где объект контекста является результатом помощников. Внутри этого контекста вы можете получить доступ к свойствам с помощью this.

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

<td>{{#with first value}}{{this.value}}{{/with}}</td>
<td>{{#with last value}}{{this.value}}{{/with}}</td>
<td>{{#with atIndex value 5}}{{this.value}}{{/with}}</td>