• User

    caricare testi diversi da file esterni con AS 3

    Ho tre pulsanti, premendo ciascuno dei tre devo caricare un testo diverso da file esterni.
    La prima volta che entro nel movieclip che contiene i tre pulsanti "forzo" la funzione legata ad uno dei tre in modo che mi carichi comunque il primo testo.
    Ecco cosa ho scritto:

    function sceltaStoria (event:MouseEvent):void
    {

    var pathFile:String = "comitato-storia.txt"

    try {
    loader.load(requestUrl);
    } catch (error:Error) {
    trace("function sceltaStoria - File Not Found!!!");
    trace(requestUrl);
    }

    };

    function sceltaComitato (event:MouseEvent):void
    {

    var pathFile:String = "comitato-comitato.txt"

    try {
    loader.load(requestUrl);
    } catch (error:Error) {
    trace(requestUrl);
    trace("function sceltaComitato - File Not Found!!!");
    }

    };

    function sceltaAttività (event:MouseEvent):void
    {
    var pathFile:String = "comitato-attività.txt"

    try {
    trace ("sto per fare il loader");
    trace (requestUrl);
    loader.load(requestUrl);
    } catch (error:Error) {
    trace(requestUrl);
    trace("function sceltaAttività - File Not Found!!!");
    }

    };

    pulComComitato.addEventListener(MouseEvent.CLICK, sceltaComitato);
    pulComAttività.addEventListener(MouseEvent.CLICK, sceltaAttività);
    pulComStoria.addEventListener(MouseEvent.CLICK, sceltaStoria);

    var pathFile:String = "comitato-storia.txt";
    var loader:URLLoader = new URLLoader();
    var requestUrl:URLRequest = new URLRequest(pathFile);

    loader.addEventListener(Event.COMPLETE, completeHandler);

    function completeHandler(event:Event):void {
    trace ("sono in completeHandler");
    var loader:URLLoader = URLLoader(event.target);
    var dateTxt:String = loader.data;
    txtComitato.htmlText = dateTxt;
    trace (dateTxt);
    }

    sceltaStoria(null);

    stop();

    Il primo caricamento va bene, il testo viene caricato dall'esterno e visualizzato correttamente.
    Se poi però faccio click su un altro pulsante il testo non cambia.
    Il problema è che da "dentro" le funzioni imposto la variabile "path" correttamente ma quando scatta la funzione completeHandler (chiamata dal listener) che è definita esternamente, va a prendere il valore della variabile "path" vecchio perchè è fuori dalla funzione.
    Come risolvere?
    Grazie mille


  • User

    Ho "risolto" portando tutto dentro le tre funzioni.
    In pratica ho dovuto triplicare il codice... Se facessi mai una cosa del genere in COBOL mi licenzierebbero immediatamente...
    Vabeh.
    Ciao.

    function sceltaStoria (event:MouseEvent):void
    {

    cfInAttività.visible = false;
    cfInComitato.visible = false;
    cfInStoria.visible = true;
    
    pulComStoria.visible = false;
    pulComComitato.visible = true;
    pulComAttività.visible = true;
    
    var pathFile:String = "comitato-storia.txt";
    var loader:URLLoader = new URLLoader();
    var requestUrl:URLRequest = new URLRequest(pathFile);
    
    try {
    // carichiamo i dati con il metodo load instanziando la variabile requestUrl
        loader.load(requestUrl);
        } catch (error:Error) {
        }
    
    loader.addEventListener(Event.COMPLETE, completeHandler);
        
        function completeHandler(event:Event):void {
            var loader:URLLoader = URLLoader(event.target);
            var dateTxt:String = loader.data;
            txtComitato.htmlText = dateTxt;
            }
    

    };

    function sceltaComitato (event:MouseEvent):void
    {

    cfInAttività.visible = false;
    cfInComitato.visible = true;
    cfInStoria.visible = false;
    
    pulComStoria.visible = true;
    pulComComitato.visible = false;
    pulComAttività.visible = true;
    
    var pathFile:String = "comitato-comitato.txt";
    var loader:URLLoader = new URLLoader();
    var requestUrl:URLRequest = new URLRequest(pathFile);
    
    try {
    // carichiamo i dati con il metodo load instanziando la variabile requestUrl
        loader.load(requestUrl);
        } catch (error:Error) {
        }
        
    loader.addEventListener(Event.COMPLETE, completeHandler);
            
    function completeHandler(event:Event):void {
        var loader:URLLoader = URLLoader(event.target);
        var dateTxt:String = loader.data;
        txtComitato.htmlText = dateTxt;
        }
    

    };

    function sceltaAttività (event:MouseEvent):void
    {

    cfInAttività.visible = true;
    cfInComitato.visible = false;
    cfInStoria.visible = false;
    
    pulComStoria.visible = true;
    pulComComitato.visible = true;
    pulComAttività.visible = false;
        
    var pathFile:String = "comitato-attività.txt";
    var loader:URLLoader = new URLLoader();
    var requestUrl:URLRequest = new URLRequest(pathFile);
    
    try {
    // carichiamo i dati con il metodo load instanziando la variabile requestUrl
        loader.load(requestUrl);
        } catch (error:Error) {
        }
    
    loader.addEventListener(Event.COMPLETE, completeHandler);
        
    function completeHandler(event:Event):void {
        var loader:URLLoader = URLLoader(event.target);
        var dateTxt:String = loader.data;
        txtComitato.htmlText = dateTxt;
    }
    

    };

    pulComComitato.addEventListener(MouseEvent.CLICK, sceltaComitato);
    pulComAttività.addEventListener(MouseEvent.CLICK, sceltaAttività);
    pulComStoria.addEventListener(MouseEvent.CLICK, sceltaStoria);

    sceltaStoria(null);

    stop();