Quando si estente una classe da un MovieClip che continene altri oggetti (MovieClip, TextField, etc…) questi ultimi potrebbero non essere “pronti” all’interno del costruttore. Questo accade soprattutto quando si utilizzano altri MovieClip estesi o i componenti (controls) di Flash. Per risolvere il problema basta sfruttare l’evento onLoad ereditato dalla classe stessa. Ad esempio immaginiamo di avere un MovieClip che contiene un campo TextField (oggetto visuale statico interno a Flash) e un oggetto TextInput (controllo inserito dal pannello componenti) e si vuole impostare qualche proprietà durante il costruttore della nostra classe MiaClasse.
Creiamo un simbolo ed inseriamo al suo interno sia l’oggetto TextField (chiamiamolo text_txt) sia l’oggetto TextInput (textinput_txt). Associamo questo simbolo ad una classe che estende un MovieClip, chiameremo la nostra classe MiaClasse. Quello che vogliamo ottenere è che durante il costruttore della nostra classe MiaClasse vengano inizializzati questi due controlli. Se proviamo ad usare un codice come questo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Quello che otteremo sarà l’inizializzazione del solo controllo TextField! Se invece proviamo a sfruttare l’evento onLoad ereditato dalla super classe MovieClip:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // import mx.controls.TextInput; // class MiaClasse extends MovieClip { // private var text_txt:TextField; private var textinput_txt:TextInput; // function MiaClasse() { trace("MiaClasse::costruttore"); // text_txt.text = "Ciao"; // onLoad = _onLoad; } // private function _onLoad() { textinput_txt.text = "Ciao"; } } |
In questo caso la stringa “Ciao” sarà visibile sia sul TextField che sul TextInput. Una regola generale, quindi, quando si hanno componenti ed altri MovieClip “derivati”, potrebbe essere quella di inserire sempre nel costruttore un puntatore ad una funzione privata _onLoad() (o init() se preferite) utilizzata per eseguire tutte le inizializzazioni del caso, comprese quelle che normalmente inseriremo – con successo – nel costruttore.








11
Ovviamente la stessa cosa è valida per l’evento unLoad()
[...] La soluzione proposta in Flash: come inizializzare componenti nel costruttore di una classe, ad esempio, viene risulta in ActionScript 3.0 in questo modo: PLAIN TEXT Actionscript: [...]