我遇到了模板上下文的情况,我很难找到解决方法.
这是有问题的模板:
{{#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}}
Run Code Online (Sandbox Code Playgroud)
这是一个投票文件的例子:
{
_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
}
]
}
Run Code Online (Sandbox Code Playgroud)
这就是问题......
当模板进入#eachfor参与者时,它不再具有对vote上下文的访问权限,因此无法访问每个投票的可用选项.
我可以稍微解决这个问题,通过使用../options车把路径跳回到父上下文,但这并不影响模板辅助的情况下,所以this在Template.vote.is_selected_option指当前participant,而不是当前的vote或option …
我开始使用Meteor,并调整todo示例以包含嵌套标记组.我有以下HTML,它输出每个标签组的每个名称,以及每个组中的标签列表:
<template name="tag_filter">
{{#each tag_types }}
{{ tag_name }}
{{#each values }}
<div data-taggroup="{{ ../tag_name }}">
{{ name }} ({{ count }})
</div>
{{/each}}
{{/each}}
</template>
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何调整事件处理程序以获取标签上的点击以访问父组的值tag_name?(即每个循环外部的数据).
目前我有下面的代码,但this对象只允许我访问name和count.
Template.tag_filter.events({
'mousedown .tag': function () {
console.log('tag mousedown', this);
// How do I get the value of tag_name?
}
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用了Handlebars父路径来添加data-taggroup包含该名称的属性,但我不确定如何从事件处理程序中访问它.
我认为这个问题是相关的,但我不理解OP的解决方案(部分原因是因为我没有使用Coffeescript).还有一个关闭的流星问题是相关的.
meteor ×2