Accedere a proprietà nascoste dei componenti in Flex (mx_internal)

Flex oscar Commenta l'articolo

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

Scrivi un Commento

Home | Graffiti e Disegni | Educazione | Chi siamo | Blog | Progetti | Contatti
RSS Feed Comments RSS Accedi