Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [MX2] XML.onLoad

  1. #1

    Questa è difficile

    ciao a tutti...sono disperato, sto facendo la tesi di laurea sulla creazione di component in flash2004 da inserire in un sito totalmente automatizzato.....e nn c'è reference nè nulla.....dunque, il primo component che faccio è un reader xml component che estende la classe movie clip e richiama un oggetto xml che a sua volta richiama una classe xmlParser....il mio problema è che alla chiamata dell'evento onLoad dell'oggetto xml (tale chiamata la faccio dentro la classe component) vorrei richiamare una funzione, che io ho spudoratamente scritto nella classe del component e che quindi nn posso richiamare all'interno del mio evento...mi spigo meglio con del codice....

    codice:
    class component_xml extends UIComponent {
    	static var symbolName:String = "component_xml";
    	static var symbolOwner:Object = component_xml;
    	public var mc_box:MovieClip;
    
    	...
    	
    	public function component_xml() {
    	}
    	
    	public function init():Void {
    		super.init();
    		caricamento();
    	}
    	
    	public function caricamento() {
    		if (FileXML == "") {
    			trace("Valore del file XML non inizializzato.Inserire il path corretto");
    			return null;
    		} else {
    			objXML = new XML(FileXML);
    			objXML.load();
    			objXML.onLoad = function(success) {
    				if (success) {
    					chiamoFunzione();
    				} else {
    					this.caricatoKo();
    				}
    			};
    		}
    	}
    	
    	public function chiamoFunzione():Array {
    		trace("ciao");//non funziona
    	}
    		
    	
    }
    naturalmente questo nn funziona, visto che la funzione chiamoFunzione() è propria dell'oggetto component e nn posso referenziarla così....un metodo che ho trovato è stato quello di dare come parametro alla funzione caricamento una funzione della classe component .....codice

    codice:
    class component_xml extends UIComponent {
    	
           ...
    	
    	public function component_xml() {
    	}
    	
    	public function init():Void {
    		super.init();
    		caricamento(chiamoFunzione);
    	}
    	
    	public function caricamento(funzioncina:Function) {
    		if (FileXML == "") {
    			trace("Valore del file XML non inizializzato.Inserire il path corretto");
    			return null;
    		} else {
    			objXML = new XML(FileXML);
    			objXML.load();
    			objXML.onLoad = function(success) {
    				if (success) {
    					funzioncina();
    				} else {
    					this.caricatoKo();
    				}
    			};
    		}
    	}
    	
    	public function chiamoFunzione():Array {
    		trace("ciao");//funzionaaaa
    	}
    		
    	
    }
    Ma anche questo nn mi piaceva, così ho scritto una classe mioXML estendendola da XML e ho sovrascritto l'evento onLoad, richiamando una funzione al suo interno scritta direttamente nella classe mioXML.....questo funziona..codice


    codice:
    class mioXML extends XML {
    
    	public var oggettoComponent:component_xml;
    	public var stringaFile:String;
    	public var nomeIstanza:String;
    	public var parser:XML_Parser;
    	public var arrayInterno:Array;
    	public var arrayEsterno:Array;
    	private var numeroNodi:Number;
    	
    	public function mioXML(file:String, nomeIst:String, nomeComponent:component_xml) {
    		super();
    		this.stringaFile = file;
    		this.nomeIstanza = nomeIst;
    		this.oggettoComponent=nomeComponent;
    	}
    	public function load() {
    		super.load(stringaFile);
    	}
    	public function onLoad():Boolean {
    		if (this.loaded) {
    			this.caricatoOk();
    			return (true);
    		} else {
    			this.caricatoKo();
    			return (false);
    		}
    	}
    	private function caricatoOk():Void {
    		
    		parser = new XML_Parser(this);//oggetto scritto da me che fa il parser dell'xml
    		numeroNodi = parser.getNumeroNodi();
    		this.oggettoComponent.setArray(this.getValoriTotali());
    		_root[""+nomeIstanza].loading._visible = false;//variabile del component
    	}
    	private function caricatoKo() {
    		_root[""+nomeIstanza].loading._visible = true;//come sopra
    	}
    	...//altre funzioni
    		
    }

    arrivo alla domandona....ma zio santissimo,i famosi dispatchEvent,Listener e compagnia bella li posso usare???come????senza dover ricorrere a sovrascrittura di classi e a trick inutili!!!!qualcuno ha idee???qualcuno ha già provato

  2. #2
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Quello che vuoi fare e far funzionare il tuo primo script?

  3. #3
    quello che vorrei fare è capire in che maniera posso controllare gli eventi di oggetti inseriti all'interno dei miei component....quello che ho postato funziona,ma senza il dispatchEvent e l'oggetto Listener....vorrei imparare ad usarli...ma nn capisco come...cioè......posso richiamare un evento di un oggetto(xml nella fattispecie) che è all'interno di un component senza dover estendere per forza la classe xml e riscrivere il suo evento onLoad???usando il dispatcherEvent e un oggetto Listener???

  4. #4
    ci sono!!!so cosa domandarvi!!!io sono dentro la classe del component,ma devo poter disporre degli eventi che succedono a movieclip o ad oggetti (xml,bottoni...) interni al compoenent....ma gli eventi ed il listener non funzionano...tutorial???help???droghe pesanti??

    ciao

  5. #5
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    E chi ha detto che non puoi? Puoi usare regolarmente gli eventi dei pulsanti, e dell'oggetto xml: il problema, più che altro, e creare il riferimento alla classe che li contiene. D'altronde, per usare l'eventDispatcher, devi comunque subclassare l'oggetto (nel tuo caso l'xml). Avevo mai visto questa cosa in flash mx?

    codice:
    objXML = new XML();
    objXML.path = this;
    objXML.onLoad = function(success)
    {
    	if (success) {
    		this.path.chiamoFunzione();
    	} else {
    		this.path.caricatoKo();
    	}
    };
    chiamoFunzione = function()
    {
    	trace("OK")
    }
    objXML.load("file.xml");

  6. #6

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.