Распространение пользовательского события на родительский swf из элемента внутри дочернего swf - PullRequest
1 голос
/ 19 июля 2011

У меня есть два файла swf, A.swf и B.swf, каждый со своим классом документа: B.swf загружается в мувиклип A.swf.При загрузке B.swf создает экземпляр CSDragger (это объект библиотеки со своим классом, расширяющим MovieClip) и устанавливает для свойства ID этого экземпляра определенное значение.Когда этот перетаскиватель сбрасывается пользователем после мувиклипа, он также отправляет пользовательское событие, содержащее значение идентификатора. Пользовательское событие регулярно достигает B.swf, но никогда не достигает A.swf. Помимо рефакторинга класса CSDragger (например, перемещения его метода handleDrop в классе документа B.swf), есть ли способ для событиядостичь A.swf?Я знаю, что могу перехватить его и отправить другое событие, но я искал другое решение (если есть).

В теле конструктора класса документов A.swf содержится следующее:

var ldr = new Loader(); 
ldr.load(new URLRequest("B.swf")); 
menuLoader_mc.addChild(ldr);

Это пользовательский класс событий: класс CSDragger запускает событие ITEM_DATA, которое достигаеткласс документа B.swf (но не класс документа A.swf).Конечно, внутри B.swf и A.swf есть слушатели.

package events { 
    import flash.events.EventDispatcher; 
    import flash.events.Event; 

    public class ItemEvent extends Event { 
        public static const ITEM_DATA:String = "ItemData"; 
        public var data:*; 

        public function ItemEvent(type:String, data:*) 
        { 
            this.data = data; 
            super(type, true); 
        } 
    } 
}

1 Ответ

0 голосов
/ 19 июля 2011

Я собираюсь предположить, что существует прямая линия предков в дереве отображения между объектом, который отправляет событие, и корнем B.swf (я вижу, вы редактируете, так и есть).

Возможно, у вас проблема с ApplicationDomain, поэтому попробуйте загрузить в B.swf, используя контекст из A.swf:

var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
var ldr = new Loader(); 
ldr.load(new URLRequest("B.swf"),context); 
menuLoader_mc.addChild(ldr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...