Показать сообщение отдельно
Старый 13.03.2010, 17:28
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
В этом обработчике необходимо обратиться к свойству мувика, который сгенерил событие (когда пишу просто this.anyField компилятор выдает ошибку что в классе Main нету такого свойства). Кроме того нужно обратиться и к методам класса Main тоже.
В данном случае this указывает на один из мувиков, так как обработчик вызывается через этот мувик, но компилятор не в курсе этого, поэтому нужно в этом случае кастовать к типу мувика, содержащегося в массиве.
Но это не совсем верно, на мой взгляд, вызывать обработчик содержащийся в одном объекте в области видимости другого. Могу предложить такой вариант:
Код AS1/AS2:
import com.aditall.utils.Delegate;
 
class Main
{
 
	public function Main()
	{
		super();
 
		myObject = {};
		myObject.onMouseDown = Delegate.create(this, myObject_onMouseDownHandler, [ { target: myObject } ]);
		Mouse.addListener(myObject);
	}
 
	private var myObject;
 
	private function myObject_onMouseDownHandler(event:Object):Void
	{
		trace(event.target == myObject);
		trace(this instanceof Main);
	}
 
}
Класс делегата взял от сюда http://www.flasher.ru/forum/showthread.php?p=880125