2012-05-02 3 views
6

Я подключил некоторые основные события click, используя Meteor's event maps.Остановка распространения события в Метеор

Как предотвратить распространение события после его обработки?

документы метеора state что

Прямо сейчас, обработчики событий подключаются с JQuery, и событие объекта вы получаете объект события JQuery.

Однако, не return false или e.stopPropagation() похоже, работают.

+0

У меня было много проблем с этим, и именно поэтому я переключился на события jQuery. Я думаю, что это может быть ошибка, но я не уверен, что у меня не было времени на отладку. Я бы предложил сделать то же самое или попытаться отладить. – jonathanKingston

+0

Да, мой задний подход заключается в использовании обработчиков событий jQuery, а затем подключаться к картам метеоритных событий w/'$ ('# foo'). Trigger ('bar')' изнутри обработчиков. – Emmett

ответ

7

В настоящее время stopPropagation работает в ограниченном количестве случаев. Чтобы размножение останавливалось между двумя обработчиками, обработчики должны быть указаны на разных шаблонах, и между внутренним и внешним шаблонами должен быть промежуточный контейнер узла DOM. Исправление находится в разработке прямо сейчас и войдет в предстоящий выпуск.

Можете ли вы опубликовать суть своего кода, чтобы я мог убедиться, что ваш конкретный случай будет добавлен?

В качестве обходного пути вы можете попробовать e.stopImmediatePropagation(), который предоставляется jQuery и должен содержать любые другие обработчики.

+0

Спасибо за информацию. В моем коде у меня есть 'show'. Я хотел бы иметь возможность обрабатывать событие click на '# show', а затем предотвращать выполнение href-url. (Прямо сейчас, '#' появляется в строке url после обработки щелчка.) – Emmett

+0

@dgreensp - Это было упомянуто в документации как ошибка, я подумал, что она могла быть исправлена, поскольку она была удалена. Я предлагаю добавить его до тех пор, пока это исправление не будет на месте. Будучи открытым с ошибками, я думаю, что лично дает более надежную среду. – jonathanKingston

+1

Ага, вы хотите 'e.preventDefault()'! @jonathanKingston, эти ошибки были зафиксированы в 0.3.5. – dgreensp

1

Я столкнулся с этим вопросом, исследуя это сам. Документация для карт событий Blaze - here.

Для этой задачи в метеора вы должны рассмотреть 2 функции в зависимости от того, что вы хотите:

stopPropagation()

Предотвратить событие саморазмножения (бульканье) до других элементов. Другие обработчики событий, соответствующие одному и тому же элементу, все еще запущены в этой и других картах событий.

stopImmediatePropagation()

предотвратить все дополнительные обработчики событий от выполняется на этом мероприятии, в том числе других обработчиков в этой карте событий, обработчики достигается кипящий, и обработчики в других картах событий.

То, что я хотел, это прекратить пузыриться и прекратить распространение на другие обработчики событий Метеора. Таким образом, event.stopImmediatePropagation() сделал трюк, и на самом деле это не обходное решение, как указано выше.

Смежные вопросы