Отключить события на ребенка - PullRequest
0 голосов
/ 13 мая 2011

Я использую Ext JS 4. У меня есть кнопка внутри контейнера. Я хочу, чтобы контейнер получал события mouseover, mouseout и click, но эта кнопка вызывает двойной вызов обработчиков событий mouseover и mouseout для контейнера. Как я могу отключить события на дочерней кнопке?

Ответы [ 2 ]

2 голосов
/ 25 июля 2012
{
...
preventDefault: true,
...
}
2 голосов
/ 14 мая 2011

Я полагаю, что вы работаете с новым поведением bubbleEvents 4.0. Компоненты теперь распространяют некоторые события в свои родительские контейнеры. Это происходит в коде, независимо от всплытия событий DOM, вверх по иерархии компонентов.

http://dev.sencha.com/deploy/ext-4.0.0/docs/api/Ext.container.Container.html

Лучшее решение - просто остановить событие, как только вы его обработаете. Это должно предотвратить все пузыри, компонент или DOM. Как правило, это хорошая идея сделать это для событий щелчка, чтобы убедиться, что одна и только одна вещь происходит в ответ на щелчок, но я менее уверен, что он подходит для наведения мыши и наведения мыши.

panel.on('click', function(e) {
    e.stopEvent();
    // do your stuff
});

Еще одно исправление, которое вы можете попробовать (у меня нет) - стереть bubbleEvents на кнопке.

Другое, возможно, менее надежное решение - включить буферизацию событий:

el.on('click', this.onClick, this, {buffer: 10});

Буферизация объединяет дублирующиеся события в настраиваемом временном окне в одно, и это полезно для сглаживания быстрого срабатывания или дублирования событий пользовательского интерфейса, но я не уверен, как это работает с пузырьками.

...