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>
Мой вопрос заключается в следующем: как адаптировать обработчик событий для кликов по тегам для доступа к значению родительской группы 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?
}
});
Как вы можете видеть, я использовал родительские пути Handlebars, чтобы добавить атрибут data-taggroup
, содержащий имя, но я не знаете, как получить доступ к этому из обработчика событий.
Я думаю, этот вопрос связан, но я не понимаю решение OP (отчасти потому, что я не использую Coffeescript). Там также есть закрытая проблема Meteor.
Ответы
Ответ 1
Я не уверен, можете ли вы получить родительские данные шаблона, но в вашем обработчике событий вы можете получить доступ к элементам DOM: event.currentTarget получит элемент clicked. Затем просто используйте jQuery для доступа к атрибутам. Если необходимо, event.currentTarget.parentNode получит родительский элемент в DOM.
Пример: я не знаю, где вы поместили класс тега, но позвольте сказать, что это класс вашего div, где определена группа данных-taggroup. Затем вы можете получить имя тега, используя:
$(event.currentTarget).attr('data-taggroup')
Ответ 2
Я нашел решение для доступа к родительским данным:
Template.nestedTemplate.events({
'click a.class':function(event,template){
var parentID = template.data._id;
console.log(parentID);
}
});
Функция обработчика .events получает два аргумента: событие, объект с информацией о событии и шаблон, экземпляр шаблона для шаблона, где определяется обработчик. Мне очень хотелось разобраться в этом. Не используйте решение для ручек, оно показывает ваши данные!
Ответ 3
"click selected":function(e){
// this._id
var doc_id = $(e.currentTarget).parent().parent().attr("uid")
console.log(doc_id)
},
//specify the each id in the div above the nearest #each
//this will work in events but not in helpers`