Я столкнулся с ситуацией с шаблоном, с которой мне трудно найти способ.
Вот шаблон, о котором идет речь:
{{#each votes}}
<h3>{{question}}</h3>
<ul>
{{#each participants}}
<li>
<p>{{email}}</p>
<select name="option-select">
{{#each ../options}}
<option value="{{option}}" class="{{is_selected_option}}">{{option}}</option>
{{/each}}
</select>
</li>
{{/each}}
</ul>
</div>
{{/each}}
И вот пример документа для голосования:
{
_id: '32093ufsdj90j234',
question: 'What is the best food of all time?'
options: [
'Pizza',
'Tacos',
'Salad',
'Thai'
],
participants: [
{
id: '2f537a74-3ce0-47b3-80fc-97a4189b2c15'
vote: 0
},
{
id: '8bffafa7-8736-4c4b-968e-82900b82c266'
vote: 1
}
]
}
И вот проблема...
Когда шаблон падает на #each
для участников, он больше не имеет доступа к контексту vote
и, следовательно, не имеет доступа к доступным параметрам для каждого голосования.
Я могу немного обойти это, используя путь ../options
handlebars, чтобы вернуться в родительский контекст, но это не влияет на контекст помощника шаблона, поэтому this
в Template.vote.is_selected_option
относится к текущему participant
, а не текущим vote
или option
, и не знает, с какими option
мы в настоящее время выполняем итерацию.
Любые предложения о том, как обойти это, не прибегая к манипуляциям с DOM и shenanigans jQuery?
Это проблема с шаблонами, которая возникла несколько раз для меня. Нам нужен формальный способ достижения иерархии контекста шаблона, шаблонов, помощников шаблонов и событий шаблона.