Gestione degli eventi: similitudini tra Flash e Javascript
Mercoledì 25 Luglio, 2007Uno dei punti di forza di Adobe Flash risiede nella scelta di ECMAScript (sottoprodotti di ECMA - European Computer Manufacturers Association) come standard di scripting. ActionScript e Javascript, infatti, derivano entrambi da uno standard superiore che li rende estremamente simili. Questo è uno dei motivi per il quale molti programmatori ActionScript sviluppano con estrema semplicità anche in Javascript e viceversa.
ActionScript ha da sempre avuto una gestione "doppia" degli eventi che spesso ha confuso alcuni sviluppatori. Nei MovieClip, ad esempio, è possibile impostare un evento semplicemente dichiarando una funzione alla proprietà dell'evento stesso, ad esempio:
Metodo 1
-
mio_mc.onRelease = function() {
-
trace("Click sul MovieClip");
-
}
Altri oggetti, diversamente, richiedono una gestione diversa dell'evento che si vuole monitorare, richiedendo il classico listener, un oggetto predisposto a tale compito. Ad esempio l'oggetto Mouse può essere controllato in questo modo:
Metodo 2
-
var mouseListener:Object = new Obejct();
-
mouseListener.onMouseMove = function() {
-
trace("Mouse in moto");
-
}
-
Mouse.addListener(mouseListener);
I componenti possiedono un'ulteriore variante, come il componente Loader:
Metodo 3
-
var loaderListener:Object = new Object();
-
loaderListener.complete = function(evt:Object) {
-
trace("Caricamento completato");
-
};
-
myLoader_ldr.addEventListener("complete", loaderListener);
Perchè queste differenze? La ragione, in verità, è molto semplice. Il metodo 1, quello più immediato, viene utilizzato quando l'evento da "intercettare" è unico nel suo genere, cioè quando non ha senso far "scattare" più funzioni una di seguito all'altra. I metodi 2 e 3, invece, creano delle "liste" di "ascoltatori" e sono estremamente utili e potenti in quanto consentono di agganciare virtualmente infinite funzioni ad un determinato evento.
La stessa identica cosa accade in Javascript e la si può ammirare in librerie come prototype. Il comodissimo metodo observe(), messo a disposizione dall'oggetto Event, permette di agganciare funzioni ad un evento di un oggetto. Ad esempio:
-
Event.observe(window, 'load', function() { alert("Finestra caricata"); } );
In questo caso abbiamo agganciato la nostra funzione che mostra un alert all'evento load dell'oggetto window. Potremmo tuttavia ripetere l'istruzione e agganciare un'ulteriore evento:
-
Event.observe(window, 'load', function() { alert("Finestra caricata - 1"); } );
-
Event.observe(window, 'load', function() { alert("Finestra caricata - 2"); } );
Questa caratteristica, comune anche in ActionScript, è estremamente versatile è, in particolare in Javascript, è stata la chiave per la realizzazione di moltissimi "Widgets" ed estensioni (vedi il classico Snap) che oggi proliferano nel Web. La possibilità di accodarsi, infatti, ad eventi già controllati da altre funzioni, permette di essere non intrusivi (Unobtrusive) e quindi, in pratica, di aggiungere funzioni a quelle già presenti.
















JingProject
Un baco di Macromedia Flash 8, che può portare alla disperazione uno sviluppatore, risiede nella gestione del componente Window, quando viene utilizzato tramite la classe mx.managers.PopUpManager! Inoltre gli esempi forniti all'epoca da Macromedia su questo argomento, e tutt'ora online, non sono chiari, spesso addirittura palesemente sbagliati. Quello che accade, in sostanza, è un malfunzionamento che si produce all'improvviso nonostante il nostro codice funzionanva fino a cinque secondi prima. Un componente di tipo Window può essere utilizzato sia tramite il componente visuale sia tramite ActionScript, utilizzando la "comoda" libreria PopUpManager (che permette anche funzioni di modal Window - Finistre modali in topmost). Partendo da codice seguente...
il modulo di accesso ad una presistente produzione non permette di elencare i propri canali. Bisogna ricordarsi ogni volta il nome del canale insieme alla username e password. Motivo di questa scelta, probabilmente, è la possibilità di far partecipare più utenti alla stessa sessione, ma il tutto è gestito deciamente male! Inoltre avendo scelto Flash come interfaccia non è possibile sfruttare le funzionalità di autocompletamento classiche dei browser/HTML. Tuttavia anche Flash ha tali funzioni se correttamente gestito.
questa sezione soffre spesso di malfunzionamenti: i thumbnail dei video caricati a volte si scambiano e il drag & drop risente di rallentamenti frequenti. Mi è capitato di eliminare per sbaglio un video scambiandolo per un'altro. La simpatica funzione di ricerca, che permette di rintracciare Video sulla rete, è estremamente limitata. La ricerca è solo per testo e la fonte dei risultati non è mostrata. Non è possibile eseguire ricerche particolari e i risultati sono limitati a 50! Un vero peccato, in quanto costringe - alla fine - a scaricarsi i video localmente in altri modi ed eseguire un lungo upload! Il tutto con una evidente ridondanza di informazione: molti video sono già nei "calderoni" online come Google Vide, YouTube, ecc... Inoltre non è possibile inserire un link ad un video presente in rete, come un'indirizzo ad un file FLV su Blip.tv ad esempio.
anche questa sezione non mantiene i dati della sessione precedente! Forse questo è il peggiore dei comportamenti. Bisogna reimpostare tutto da capo ogni volta, come il Ticker, il Branding, etc... Inoltre non è stata pensata una vera e propria scaletta per eseguire una serie di video con relative scritte senza stare per forza davanti al PC. Diciamo che Mogulus è pensato davvero come postazione di regia in diretta e obbliga quindi la presenza di un "regista", nonostante la funzionalità di Auto-Pilot che svolge una "minimal" funzione al posto nostro! Cosa utile sarebbe stato associare Ticker, Branding, scritte Fullscreen e Partial/Strap alla messa in onda di un video, soprattutto per le situazioni ripetitive. In questo modo l'Auto-Pilot avrebbe maggiore utilità.
a parte la sequenza degli stotyboard mostrata nel pannello centrale, questa sezione è poco chiara e sostanzialmente inutile, soprattutto la terza colonna - What's playing now - sempre vuota! Qui andrebbero aggiunte le funzioni più importanti. Inoltre i bottoni Restart Auto-Pilot e Resume Auto-Pilot non sono particolarmente utili e chiari, costringendo, a fronte di un intervento in diretta, a re-inizializzare la sequenza ricominciando lo slidshow da capo!




