Já agora, e na continuação da questão anterior:

Tenho um swf com um botão que despacha o seguinte evento qdo o botão é
clicado:

dispatchEvent(new MyLogEvent(MyLogEvent.CONTENT_LOG, true));   // O
true é para garantir que o evento faz bubble

Este swf é carregado para a minha aplicação usando o SWFLoader (como
já descrevi acima). No loader penduro-lhe os seguintes listeners:

loader.content.addEventListener(MyLogEvent.CONTENT_LOG, onLogEvent);
loader.content.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

Acontece que o evento de mouse down é detectado mas o outro não!
Já experimentei de tudo, desde atribuir-lhe um LoaderContext (como o
Nuno Rosa sugeriu) a fazer dispatch de um evento simples (ex: dispatch
(new Event("helloWorld"))) mas nada funciona... O evento do rato é
sempre detectado mas os eventos que é o próprio swf a disparar não.

Alguém me ajuda? É que sinto que estou mesmo quase a resolver isto,
mas falta o quase...

Obrigada,
Carolina


On Jan 27, 5:29 pm, Carolina Torres <[email protected]> wrote:
> Já percebi onde está o erro mas continuo sem perceber porque é que
> acontece.
>
> O código do MyLogvent é o seguinte:
>
>         public class MyLogEvent extends Event
>         {
>                 // Se usar esta string para o tipo de evento dá erro
>                 //public static const CONTENT_LOG       :String = 
> "contentLog";
>                 // Se usar esta já não dá erro...
>                 public static const CONTENT_LOG :String = "myContentLog";
>
>                 private var _text:String = "";
>                 public function get text() : String
>                 {
>                         return this._text;
>                 }
>
>                 private var _logType:String = "";
>                 public function get logType() : String
>                 {
>                         return this._logType;
>                 }
>
>                 public function MyLogEvent(     type:String,
>                                                                 
> logType:String,
>                                                                 
> logText:String,
>                                                                 
> bubbles:Boolean=true,
>                                                                 
> cancelable:Boolean=false)
>                 {
>                         super(type, bubbles, cancelable);
>
>                         this._logType = logType;
>                         this._text = logText;
>                 }
>
>                 public override function clone():Event
>                 {
>                         return new MyLogEvent(  this.type,
>                                                                 this._logType,
>                                                                 this._text,
>                                                                 this.bubbles,
>                                                                 
> this.cancelable);
>                 }
>
>         }
>
> O erro surge no handler de uma classe onde penduro um listener para o
> evento MyLogEvent.CONTENT_EVENT. Se o MyLogEvent.CONTENT_EVENT for
> igual a "contentLog" o erro surge. Se mudar o valor da constante para
> "myContentLog" o erro desaparece.
> Ponderei a hipótese de algures estar a ser disparado um outro evento
> qualquer cujo tipo também fosse definido como "contentLog", fazendo
> com que o handler se baralhasse com o tipo de evento que estava a
> receber. Mas nem eu uso essa definição noutro tipo de evento nem há
> outras classes que o usem (procurei na documentação da adobe e não
> encontrei nada).
>
> Enfim, não encontrei a solução mas caso isto aconteça a alguém, deixo
> a sugestão: experimentem mudar o nome da constante que define o tipo
> do evento.
>
> On Jan 27, 3:03 pm, Carolina Torres <[email protected]> wrote:
>
>
>
> > Experimentei essa solução mas acontece o mesmo...
>
> > var context:LoaderContext =  new LoaderContext(false,
> > ApplicationDomain.currentDomain);
> > // O método load só aceita um argumento por isso fiz a atribuição do
> > loaderContext antes do load
> > _swfLoader.loaderContext = context;
> > _swfLoader.load(_contentURL);
>
> > On Jan 26, 9:00 pm, Nuno Rosa <[email protected]> wrote:
>
> > > Isso está relacionado com o ApplicationDomain.
> > > Por defeito as definições contidas no swf que estás a carregar estão num
> > > aplication domain diferente da app principal.
>
> > > Se quiseres manter as mm definições em ambos, podes definir qual o 
> > > contexto.
>
> > > var context:LoaderContext =  new LoaderContext(false,
> > > ApplicationDomain.currentDomain);
> > > loader.load(url,context);
>
> > > 2010/1/26 Carolina Torres <[email protected]>
>
> > > > Olá a todos.
>
> > > > Numa aplicação AIR estou a tentar detectar eventos vindos de um swf
> > > > que é carregado usando um SWFLoader mas surge-me o seguinte erro:
>
> > > > TypeError: Error #1034: Type Coercion failed: cannot convert
> > > > mylogev...@66c67c1 to MyLogEvent.
>
> > > > Parece que ele está a comparar uma instância de MyLogEvent à própria
> > > > classe MyLogEvent mas não percebo porquê...
> > > > Aqui está o modo como faço load do swf e como lhe penduro o listener
> > > > para o evento do tipo MyLogEvent:
>
> > > >                private function loadContent(url:String) : void
> > > >                {
> > > >                        var loader:SWFLoader = new SWFLoader();
> > > >                        loader.autoLoad = false;
> > > >                        loader.loadForCompatibility = true;
>
> > > >                        loader.addEventListener(IOErrorEvent.IO_ERROR,
> > > > ioErrorSWFHandler);
>
> > > >                        loader.addEventListener(Event.COMPLETE,
> > > > loadSWFHandler);
> > > >                        loader.load(url)
> > > >                }
>
> > > >                private function loadSWFHandler(event: Event): void
> > > >                {
> > > >                        
> > > > event.currentTarget.removeEventListener(event.type,
> > > > arguments.callee);
>
> > > >                        var loader:SWFLoader = SWFLoader(event.target);
> > > >                        loader.soundTransform = new
> > > > SoundTransform(this.soundVolume, 0);
>
> > > >                        // Aqui penduro o listener no content do
> > > > loader
>
> > > >  loader.content.addEventListener(MyLogEvent.CONTENT_LOG,
> > > > onLogEvent);
> > > >                }
>
> > > >                private function onLogEvent(event:MyLogEvent) : void
> > > >                {
> > > >                        // é aqui que tudo rebenta...
> > > >                        trace("hello");
> > > >                }
>
> > > > --
> > > > Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
> > > > Comunidade Portuguesa de Rich Internet Applications -www.riapt.org" dos
> > > > Grupos do Google.
>
> > > > Para publicar uma mensagem neste grupo, envie um e-mail para
> > > > [email protected].
> > > > Para anular a inscrição neste grupo, envie um e-mail para
> > > > [email protected] 
> > > > <riapt%[email protected]>.
> > > > Para ver mais opções, visite este grupo em
> > > >http://groups.google.com/group/riapt?hl=pt-PT.

-- 
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade 
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.

Para publicar uma mensagem neste grupo, envie um e-mail para 
[email protected].
Para anular a inscrição neste grupo, envie um e-mail para 
[email protected].
Para ver mais opções, visite este grupo em 
http://groups.google.com/group/riapt?hl=pt-PT.

Responder a