![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Aug 2013
Сообщений: 73
|
Доброго времени суток.
Никак не могу разобраться почему не выполняется диспетчеризация пользовательского события... Есть класс Class1, который расширяет EventDispatcher: package test { import flash.events.*; public class Class1 extends EventDispatcher { public static const NEW:String = "NEW"; // создаю константу с именем события public function Class1( ) { } public function testFunc( ):void { // функция, которая вызывается в третьем классе dispatchEvent(new Event(Class1.NEW)); // диспетчеризация события } } } package test { import flash.events.*; import flash.display.*; public class Class2 extends Sprite { private var class1:Class1; public function Class2( ) { class1 = new Class1( ); // создаю экземпляр класса class1 addUserListeners( ); } public function addUserListeners( ):void { class1.addEventListener(Class1.NEW, newListener); // регистрирую приёмник в экземпляре класса } public function newListener(e:Event):void { trace("Вызов прошёл!"); } } } package test { import flash.events.*; public class Class3 extends EventDispatcher { private var class1:Class1; public function Class3( ) { class1 = new Class1( ); test( ); } public function test( ) { class1.testFunc( ); } // дальше выполняется успешная диспетчеризация других событий, код не показан } } |
|
|||||
|
Вы в коде Class2 подписываетесь на событие, а в коде Class3 вызываете диспетчеризацию. Посмотрите внимательно, у Вас и там и там создается новый объект класса Class1 (new Class1). Это разные объекты. Поэтому получается что Вы ждете событие от одного объекта (созданного в конструкторе Class2), а событие отправляете из другого (созданного в конструкторе Class3)
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Aug 2013
Сообщений: 73
|
Действительно разные...
В классе Class3 создаю экземпляр класса Class1 для доступа к методу экземпляра testFunc( ), а в классе Class2 экземпляр Class1 использую для регистрации приёмника... Тогда в каком объекте регистрировать приёмник, если диспетчеризация должна проходить непосредственно в Class1? Пробовал сохранять текущую ссылку через this.class1 = class1, но безрезультатно. |
|
|||||
|
Banned
Регистрация: Mar 2013
Сообщений: 1,864
|
Вам как минимум нужно создать первым Class1 и передать на него ссылки в другие классы при их инициализации.
|
|
|||||
|
Регистрация: Aug 2013
Сообщений: 73
|
В классе Class2 переменной class1 присвоил значение class1 класса Class3. И всё заработало.
gloomyBrain, спасибо за помощь! Добавлено через 1 минуту Я опустил значительную часть кода в описании. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Листенеры вешаются не на класс, а на экземпляры.
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|