Подтвердить что ты не робот

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.

4b9b3361

Ответ 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`