Регистратор событий на детей, а не родителей - PullRequest
0 голосов
/ 26 октября 2010

Надеюсь, быстрый вопрос здесь.Я настроил пользовательский класс "LayoutPage" (на основе MovieClip), и я пытаюсь создать "выбранное" поведение.

Когда я назначаю свой "addEventListener (MouseEvent.CLICK, toggleSelection)" из моего пользовательскогокласс, все работает, как и ожидалось, щелчок любого объекта этого класса отображает правильное поведение.

Теперь я хотел бы расширить функциональность, добавив модификатор клавиатуры, чтобы либо расширить выделение, либо заменить его.

Для этого я подумал о том, чтобы переместить «addEventListener» из класса и вместо этого поместить его в родительский (мой класс «PageLayout», где живут все «LayoutPage»).Но при этом событие click больше не регистрируется в классе «LayoutPage», а скорее в его отдельных дочерних элементах (значок страницы, текстовое поле номера страницы, форма выделения страницы и т. Д.)

Кто-нибудь может объяснить, почему этопроисходит и как я могу это обойти?

TIA

1 Ответ

1 голос
/ 26 октября 2010

Это должно происходить независимо от того, куда вы положили свой addEventListener.Это потому, что mouseChildren включено по умолчанию.Вероятно, лучше отключить его внутри вашего LayoutPage класса, например, так:

myLayoutPage.mouseChildren = false;

Фактическая проблема заключается в том, что использование, вероятно, использует currentTarget для ссылки на элемент, который был нажат в вашемметод обработчика событий.Взгляните на описания currentTarget и target , чтобы получить хорошее представление о том, как они отличаются.

Хорошим вариантом было бы добавить слушателя на PageLayout уровень, но добавьте его специально для каждого LayoutPage ребенка, например так:

myLayoutPage.addEventListener(MouseEvent.CLICK, toggleSelection);

Таким образом, вы можете просто использовать target в своих обработчиках.Но, вероятно, было бы лучше по-прежнему переключать mouseChildren в false на каждом из ваших LayoutPage экземпляров.

...