mx_internal è il modo per accedere alle variabili che sono nascoste ma disponibili allo sviluppatore.
Oltre alle proprietà public e protect dei componenti in Flex, accessibili liberamente nel primo caso oppure estendendo il componente nel secondo caso, è possibile accedere a ulteriori proprietà dei componenti. Adobe non garantisce che queste proprietà siano utilizzate in versioni successive, quindi è responsabilità dello sviluppatore l’utilizzo di esse.
Un modo semplice per utilizzarle è scrivere:
import mx.core.mx_internal; use namespace mx_internal;
infatti senza il namespace appena dichiarato quando in Flex Builder premiamo il tasto destro su un’istanza di un componente vedremo solo
mentre col namespace avremo ulteriori variabili da poter modificare:
Io preferisco accedere alle proprietà dal codice e non dal Desgin di Flex Builder, in modo da controllare la funzione “createChildren” e analizzare gli elementi del componente.
Un semplice esempio è:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" >
<mx:Script>
<![CDATA[
import mx.core.mx_internal;
use namespace mx_internal;
private function click():void{
stepper.mx_internal::inputField.editable = false;
}
]]>
</mx:Script>
<mx:NumericStepper id="stepper"/>
<mx:Button label="Disabilita text di numberStepper" click="click()"/>
</mx:Application>
In questo esempio è possibile disabilitare il campo TextInput del NumeriStepper che altrimenti non sarebbe accessibile, infatti se ponessi “stepper.enabled=’false'” allora tutto il componente sarebbe disabilitato, anche i bottoni. Con questa modifica su mx_internal viene disabilitato solo il TextInput (in modo da non poter immettere nessuna cifra), ma i bottoni restano abilitati.
In questo esempio è importante il suffisso stepper.mx_internal:: in quanto inputFiled non sarebbe accessibile alternativamente, questo perché probabilmente il componente NumberStepper ha già un namespace di nome “mx_internal”.
In altri esempi possiamo toglierlo a patto di definire la dichiarazione:
import mx.core.mx_internal; use namespace mx_internal;
Altri esempi sono qui
Ultimi Commenti