Meteor:如何在嵌套模板中访问父属性?

Ric*_*ard 12 meteor

我开始使用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对象只允许我访问namecount.

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).还有一个关闭的流星问题是相关的.

Mar*_*arz 10

我找到了访问父数据的解决方案:

Template.nestedTemplate.events({
    'click a.class':function(event,template){
        var parentID = template.data._id;
        console.log(parentID);
    }
});
Run Code Online (Sandbox Code Playgroud)

.events处理函数接收两个参数:event,包含事件信息的对象,以及模板,定义处理程序的模板的模板实例.我花了很长时间才弄明白这一点.不要使用车把解决方案,它会显示您的数据!

  • 这个.将得到当前上下文(例如,如果你在{{each}}块中),对于我来说,`template`获取模板上下文,它可以与当前上下文不同. (4认同)

Gwe*_*ned 3

我不确定您是否可以获取父模板数据,但在事件处理程序中您可以访问 DOM 元素:event.currentTarget将获取单击的元素。然后只需使用 jQuery 来访问属性即可。如果需要,event.currentTarget.parentNode将获取 DOM 中的父元素。

例如:我不知道你把标签类放在哪里,但假设它是定义 data-taggroup 的 div 类。然后你可以使用以下方法获取标签名称:

$(event.currentTarget).attr('data-taggroup')
Run Code Online (Sandbox Code Playgroud)