Я использую handlebars.js для перебора categories, а затем использую текущий индекс массива для доступа к элементу в массиве series. Я могу сделать это с помощью помощника ниже.
var json = {
"categories": [{
"id": 3,
"name": "category 0"
}, {
"id": 6,
"name": "category 1"
}
],
"series": [{
"id": 1,
"name": "DUMMY",
"data": [{
"id": 5,
"name": "series 0 data 0"
}, {
"id": 10,
"name": "series 0 data 1"
}
]
}
]
}
Handlebars.registerHelper('getArrayValues', function(ar, index, prop) {
return ar[0].data[index][prop];
});
var template = Handlebars.compile(json);
{{#each categories}}
<p>id: {{this.id}}</p>
<p>name: {{this.name}}</p>
<p>series id with helper: {{getArrayValues ../series @index 'id' }}</p>
<p>series name with helper: {{getArrayValues ../series @index 'name' }}</p>
{{/each}}
Могу ли я сделать это без помощника? Ниже моя попытка. Я также пробовал использовать lookup, но, похоже, могу получить доступ к свойствам, возвращаемым lookup.
{{#each categories}}
<p>id: {{this.id}}</p>
<p>name: {{this.name}}</p>
<p>series id: {{../series.[0].data.[@index].id}}</p>
<p>series name: {{../series.[0].data.[@index].name}}</p>
{{/each}}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Одно решение, которое я нашел для этого, я не знаю, насколько оно хорошо, но оно отлично работает
Попробуй это :)
{{#each categories}}
<p>id: {{this.id}}</p>
<p>name: {{this.name}}</p>
<p>series id with helper:{{#with (lookup ../series.[0].data
@index) }}{{this.id}}{{/with}}</p>
<p>series name with helper: {{#with (lookup ../series.[0].data
@index) }}{{this.name}}{{/with}}</p>
{{/each}}
Протестировано, работает отлично. Я нашел документацию по #with на handlebarsjs.com/builtin_helpers.html. Спасибо
Спасибо, Нишант, хотя я уверен, что ваш ответ точен (однако не проверял), возможно, я буду придерживаться своей глупой вспомогательной функции, поскольку она имеет для меня смысл. Редактировать. Наверное поменяют на твою.