Home » ActionScript 3.0, Adobe

Flex 3: Creazione di un componente personalizzato - Parte 4

17 December 2008 No Comment

Conversione di un componente MXML in Actionscript 3.0

In questo esercizio convertiremo il codice MXML utilizzato in precedenza per realizzare
il componente in ActionScript 3.0.

Per procedere consiglio di duplicare il progetto realizzato finora e cancellare il file RegioniComboBox.mxml. In alternativa effettuate il download del codice allegato al tutorial.

Al posto del componente MXML creeremo quindi unclasse interamente in AS 3 che replicherà esattamente le funzionalità implementate nella parte 3 del tutorial. Per farlo, premere il tasto destro sulla cartella Views –> NEW –> New ActionScript Class e chiamate il file ‘RegioniComboBox.as’).

Il file principale (main.mxml) rimarrà invariato. Le istanze del componente verranno create come nei precedenti esercizi, anche se ora il componente sarà una classe Actionscript invece di
un file MXML.
E’ bene ricordare, infatti, che tuttò ciò che è scrivibile in linguaggio MXML può essere convertito in Actionscript 3.0, il quale permette una flessibilità maggiore e diventa spesso necessario in determinate circostanze.

Di seguito il codice completo della classe Actionscript del componente ‘RegioniComboBox’ commentato passo-passo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package Views
{
	import Events.CustomEvent;
	import mx.containers.HBox;
	import mx.controls.ComboBox;
	import mx.controls.Label;
	import mx.events.ListEvent;
 
	[Event(name="changeRegion", type="Events.CustomEvent")]
 
	public class RegioniComboBox extends HBox
	{
 
		// Array delle regioni (ovvero il dataProvider del comboBox)
		[Bindable]
		private var dp:Array = new Array();	
 
		// Istanza componente Label
		private var lbl:Label = new Label()
 
		// Istanza componente Combobox
		private var cmb:ComboBox = new ComboBox()
 
 
 
		// Costruttore				
		public function RegioniComboBox()
		{
			// Visualizziamo i componenti
			addChild(lbl)	
			addChild(cmb)	
 
			// Popoliamo il combobox sfruttando il dataProvider
			cmb.dataProvider = dp;
 
			// Visualizziamo il primo elemento del comboBox
			cmb.selectedIndex = 0;
 
			// Definiamo l'evento CHANGE per il combobox
			cmb.addEventListener(ListEvent.CHANGE, changeEvt)
		}
 
 
 
		// Evento invocato ad ogni cambio regione 
		private function changeEvt(event:Event):void {
 
	       // Dispatch dell'evento changeRegion.
	       // Sfruttiamo la stessa classe 'CustomEvent' realizzata in precedenza
	        var e:CustomEvent = new CustomEvent(event.currentTarget.selectedItem.data, 
	        									event.currentTarget.selectedItem.label, 
	        									"changeRegion");
			this.dispatchEvent(e);
 
	     }
 
 
		// Definiamo le regioni da visualizzare  
		public function set setRegione(area:String):void
		{
 
			dp.push({label: "Regioni del " + area, data:null})
 
			switch(area)
			{
				case "Nord":
					  dp.push({label:"Friuli Venezia Giulia", data:"1"});
			          dp.push({label:"Veneto", data:"2"});
		              dp.push({label:"Trentino", data:"3"});
		              dp.push({label:"Lombardia", data:"4"});
		              dp.push({label:"Piemonte", data:"5"});
		              dp.push({label:"Valle d'aosta", data:"6"});
		              dp.push({label:"Liguria", data:"7"});
		              dp.push({label:"Emilia Romagna", data:"8"});    
 
 
					break;	
 
				case "Centro":
					  dp.push({label:"Toscana", data:"9"});
		              dp.push({label:"Umbria", data:"10"});
		              dp.push({label:"Marche", data:"11"});
		              dp.push({label:"Lazio", data:"12"});
		              dp.push({label:"Abruzzi", data:"13"});    
 
					break;
 
				case "Sud":
					  dp.push({label:"Campania", data:"14"});
					  dp.push({label:"molise", data:"15"});
	                  dp.push({label:"Puglia", data:"16"});
	                  dp.push({label:"Basilicata", data:"17"});
	                  dp.push({label:"Calabria", data:"18"});
	                  dp.push({label:"Sicilia", data:"19"});
	                  dp.push({label:"Sardegna", data:"20"});   
 
					break;					
 
			}	
 
 
 
		}	
 
		// Metodo Setter: settiamo il valore del componente Label 
		public function set setLabel(val:String):void
		{
			lbl.text = val;			
		}	
 
	}
}

Download Source Code

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.