Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    dipatchEvent non funzionante

    ho una classe con questo costruttore

    Codice PHP:
    public function PhpCaller(url:Stringfields:Array, values:Array) {

    _php_page=url;
    _fields=fields;
    _values=values;
    _report=null;
                
    check_values();
    dispatchEvent(new Event(TEST));

    nell'istanza
    _php_caller.addEventListener(PhpCaller.TEST, myFunc);

    perchè l'evento non viene dispacciato??
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    L'unica cosa che mi viene in mente è che tu non abbia esteso la classe come "figlia" di EventDispatcher.

  3. #3
    Codice PHP:
    package com{

        
    import flash.display.*;
        
    import flash.text.TextField;
        
    import flash.utils.Timer;
        
    import flash.events.*;
        
    import flash.net.*;

        
    import com.CheckEmail;
        
    import com.CustomEvent;

        public class 
    PhpCaller extends Sprite {
            
            public static const 
    TEST:String "test";

            private var 
    _php_page:String;
            private var 
    _fields:Array;
            private var 
    _values:Array;
            private var 
    _report:String;

            private var 
    _c:CheckEmail=new CheckEmail();

            public function 
    PhpCaller(url:Stringfields:Array, values:Array) {

                
    _php_page=url;
                
    _fields=fields;
                
    _values=values;
                
    _report=null;
                
                
    check_values();
                
    dispatchEvent(new Event(TEST));
            }

            private function 
    check_values():void {

                var 
    i:Number=0;
                for 
    each (var v:* in _fields) {
                    
                    if (
    _values[i]=="") {
                        
    _report="missing fields";
                        
    trace("php report = missing fields");
                        break;
                    } else if (
    v.indexOf("mail",0)!=-1) {
                        if (! 
    _c.initCheck(_values[i])) {
                            
    _report="wrong mail";
                            
    trace("php report = wrong mail");
                            break;
                        }
                    }
                    
    i++;
                }

                if (
    _report==null) {
                    
    send_info();
                } else {
                    
                    
    dispatchEvent(new CustomEvent(CustomEvent.CUSTOM_report));
                    
                }
            }

            private function 
    send_info():void {

                var 
    r:URLRequest=new URLRequest(_php_page);
                
                var 
    variables:URLVariables=new URLVariables();
                var 
    i:Number=0;
                for 
    each (var v:String in _values) {
                    
    variables[_fields[i]]=v;
                    
    i++;
                }

                
    trace("php caller vars = "+variables);
                
    r.method=URLRequestMethod.GET;// POST when online
                
    r.data=variables;
                    
                var 
    loader:URLLoader=new URLLoader();
                
    loader.dataFormat=URLLoaderDataFormat.VARIABLES;
                
    addListeners(loader);
                
                
    //navigateToURL(r, "_blank");// for debug
                
                
    try {
                    
    loader.load(r);
                } catch (
    error:Error) {
                    
    _report="unable to load";
                    
    dispatchEvent(new CustomEvent(CustomEvent.CUSTOM_report));
                }
            }
            
            private function 
    addListeners(d:IEventDispatcher):void {
                
    d.addEventListener(Event.COMPLETE,completeHandler);
                
    d.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError);
                
    d.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatus);
                
    d.addEventListener(IOErrorEvent.IO_ERROR,ioError);
            }

            private function 
    completeHandler(e:Event):void {
                
                
    //trace(e.target);
                //trace(e.target.data);
                
    var loader:URLLoader=URLLoader(e.target);
                var 
    report:URLVariables=new URLVariables(loader.data);
                
    _report=report.report;
                
    trace("php report = "+_report);
                
    dispatchEvent(new CustomEvent(CustomEvent.CUSTOM_report));

            }
            private function 
    securityError(e:SecurityErrorEvent):void {
            }
            private function 
    httpStatus(e:HTTPStatusEvent):void {
            }
            private function 
    ioError(e:IOErrorEvent):void {
            }
        }

    questa è la classe, ancora work in progress.
    il problema è sorto perchè solo l'ultimo CustomEvent viene dispacciato, e quindi stavo andando a ritroso per capire il problema..
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, vedendo il resto della classe comprendo il problema. intanto ti dico che effettivamente la classe è un'estensione di EventDispatcher, poichè anche Sprite lo è, quindi siamo sicuri che gli eventi debbano pervenire alla classe. Il problema è che tu cerchi di fargli dispatchare l'evento tramite una stringa vuota (TEST è una proprietà statica, non la puoi usare in quel modo dentro alla classe), meglio se usi direttamente il testo, poi quando la utilizzi puoi anche usare il vettore PhpCaller.TEST.

    Codice PHP:
    dispatchEvent(new Event("test")); 

  5. #5
    avevo già provato tutte le varianti, questa compresa.

    c'è qualcosa che non mi torna, utilizzo sempre quel sistema per dispacciare eventi.
    guarda ad esempio il vero evento che voglio dispacciare: CustomEvent.

    funziona solo se la classe entra nel completeHandler ma non negli altri 2 casi.

    di seguito CustomEvent, per passare paramentri contestuali all'evento.


    Codice PHP:
    package com{

        
    import flash.events.Event;

        public class 
    CustomEvent extends Event {

            public static const 
    CUSTOM:String="custom";

            public var 
    arg:*;

            public function 
    CustomEvent(type:StringcustomArg:*=null,  
                                                    
    bubbles:Boolean=false,
                                                    
    cancelable:Boolean=false) {

                
    super(typebubblescancelable);
                
    this.arg=customArg;
            }

            public 
    override function clone():Event {

                return new 
    CustomEvent(typeargbubblescancelable);
            }

            public 
    override function toString():String {

                return 
    formatToString("CustomEvent""type""arg",
                
                                                     
    "bubbles""cancelable""eventPhase");
            }
        }

    ho provato anche a non sovrascrivere nessun evento, quindi utilizzare solo dispatchEvent(new Event... ma senza risultati...

    cosa vuoi dire con "TEST è una proprietà statica, non la puoi usare in quel modo dentro alla classe"?
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    >> avevo già provato tutte le varianti, questa compresa.

    Mi pare strano che non vada, salvo che non sia possibile farlo perchè sei dentro al costruttore, da provare.


    >> c'è qualcosa che non mi torna, utilizzo sempre quel sistema per dispacciare eventi.
    >> guarda ad esempio il vero evento che voglio dispacciare: CustomEvent.
    >> funziona solo se la classe entra nel completeHandler ma non negli altri 2 casi.

    Nel try...catch l'unica maniera di far dispatchare l'evento è che "loader" o non sia una classe che possiede il metodo "load", o che i parametri siano inadeguati, mentre il load viene eseguito comunque, sta poi all'istanza loader dispatchare gli eventi utili per verificare che il load sia andato a buon fine

    Mentre nel check_values non vedo intoppi, se non la probabilità che _report non sia mai "null", potresti provare a passargli una stringa vuota al posto di null e vedere se così l'evento viene visto.


    >>cosa vuoi dire con "TEST è una proprietà statica, non la puoi usare in quel modo dentro alla classe"?

    Tu hai impostato la costante "TEST" come proprietà statica e pubblica della classe PhpCaller, perciò potrai richiamare quella proprietà solo usando PhpCaller.TEST, anche dentro alla classe stessa (all'interno di una funzione non statica).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.