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

时间:2012-10-26 17:52:11

标签: meteor

我开始使用Meteor,并调整todo example以包含嵌套标记组。我有以下HTML,它输出每个标签组的每个名称,以及每个组中的标签列表:

  <template name="tag_filter">
    {{#each tag_types }}
      {{ tag_name }}
      {{#each values }}
        <div data-taggroup="{{ ../tag_name }}">
        {{ name }} ({{ count }})
        </div>
      {{/each}} 
    {{/each}}
</template>

我的问题是:如何调整标记点击的事件处理程序以访问父组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?
  }
});

如您所见,我已使用Handlebars parent paths添加包含该名称的data-taggroup属性,但我不确定如何从事件处理程序中访问该属性。

我认为this question是相关的,但我不理解OP的解决方案(部分是因为我没有使用Coffeescript)。还有一个closed Meteor issue是相关的。

3 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:3)

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

Ex:我不知道你把标记类放在哪里,但是让我们说它是div的类,其中定义了data-taggroup。然后你可以使用:

获取标签名称
$(event.currentTarget).attr('data-taggroup')

答案 2 :(得分:0)

}
    else {
        var response = anonFunction();  

        while($.activeAJAX().length !== 0) // <<< something like this
            // will do nothing and wait.
        }