Да, когда вы добавляете слушателя кнопки в функцию в этом объекте, конечно, только этот объект получит событие. Когда вы вызываете addEventListener
с помощью функции highlightMe
, вы передаете ссылку на функцию highlightMe
в текущей области. Это означает, что на частную функцию в этом классе ссылаются. Но эта функция отличается для каждого нового экземпляра класса.
В ООП каждый объект работает сам по себе и ничего не знает о родителях, поэтому одна кнопка ссылки не должна знать, что помимо нее есть другие кнопки ссылки и что эти кнопки делают. Вместо этого родитель знает, что есть X различных кнопок ссылок, каждая из которых работает в одиночку, но управляется родителем для совместной работы. В этом смысле при работе с событиями всегда следует оставлять обработку событий в родительском объекте - за исключением того, что у вашего пользовательского класса есть обработчики по умолчанию, которые поддерживают работу стандартной процедуры (например, изменение внешнего вида при наведении мыши и т. Д.) Или когда у вас есть пользовательские события которые инкапсулируют другие события.
Таким образом, правильный способ справиться с этим - это иметь один обработчик событий в родительском классе (где вы создаете экземпляры кнопок), который также может определить, к какой кнопке относится событие.
Пример
public class SomeParent extends Sprite
{
public function SomeParent ()
{
var btn:Button;
for ( var i:uint = 0; i < 100; i++ )
{
btn = new Button();
btn.label = 'Button ' + i;
btn.addEventListener( MouseEvent.CLICK, clickHandler );
this.addChild( btn );
}
}
private function clickHandler ( event:MouseEvent ):void
{
var btn:Button = event.eventTarget as Button;
trace( 'Button with id ' + this.getChildIndex( btn ) + ' and label "' + btn.label + '" was pressed.' );
}
}