Występuje problem z kontekstem szablonu, który trudno jest znaleźć.Uzyskiwanie dostępu do kontekstu nadrzędnego w szablonach meteorytów i szablonach pomocników
Oto szablon w pytaniu:
{{#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}}
A oto przykład dokumentu głosowanie:
{
_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
}
]
}
I tu jest problem .. .
Kiedy szablon wpada do uczestników #each
, nie ma już dostępu do kontekstu vote
i dlatego nie ma dostępu do dostępnych opcji dla każdego głosowania.
mogę nieco to obejść za pomocą ścieżki ../options
kierownicy, aby przejść z powrotem do macierzystego kontekstu, ale nie wpływa to kontekst pomocnika szablonu, więc this
w Template.vote.is_selected_option
odnosi się do aktualnej participant
, nie do bieżącego vote
lub option
i nie ma możliwości sprawdzenia, który option
jesteśmy obecnie iteracyjne.
Wszelkie sugestie, jak obejść ten problem, bez uciekania się do manipulacji DOM i shenanigans jQuery?
Jest to kwestia szablonowa, która pojawiła się wielokrotnie dla mnie. Potrzebujemy formalnego sposobu dotarcia do hierarchii kontekstu szablonu, szablonów, szablonów i zdarzeń szablonu.
zorlak: To, co zrobiłem, jest bardzo podobne do twojego przykładu: stworzyłem rozszerzoną kolekcję 'members_with_vote_info' zawierającą wszystko, czego potrzebowałem, i iterowałem przez to z' # each', dzięki czemu nie musiałem wskakiwać z powrotem do rodzic. Dzięki za pomysł! – cmal
Dobra odpowiedź - ale to jest do bani. To powinno być naprawione – Chet
Dla układu zagnieżdżonych szablonów jest to dość bolesne w dupie –