Si un élément de données est requis par tous les composants d'un graphique/arbre, le mieux est d'exposer une propriété publique pouvant être liée sur chacun d'eux. Laissez les composants enfant envoyer un événement de bulle qui est géré par le parent, qui peut définir la nouvelle valeur de la propriété bindable. Si vous liez la propriété du parent à l'enfant, cela se répercutera en cascade sur les autres composants.
<!-- in root application -->
<Component1 myData="{myData}"/>
Si vous avez besoin d'invoquer une logique supplémentaire, vous pouvez définir un getter/setter au lieu de var public et ajouter une logique au poseur:
[Bindable] private var _myData;
public function set myData(value:Object):void
{
_myData = value;
doSomeLogic();
}
Encore mieux serait d'utiliser le cadre de infirmation Flex pour optimiser les performances:
_myDataChanged : Boolean = false;
[Bindable] private var _myData;
public function set myData(value:Object):void
{
if (_myData != value) {
_myData = value;
_myDataChanged = true;
}
invalidateProperties();
}
override protected function commitProperties() : void {
super.commitProperties();
if (_myDataChanged) {
_myDataChanged = false;
doSomeLogic()
}
}
Ce motif est utilisé partout dans tous les composants UIC qui constituent la structure Flex. Vous pouvez également avoir besoin de surcharger updateDisplayList (...) pour positionner les éléments.
ah, c'est ce dont j'ai besoin. J'aime aussi ce cadre d'invalidation. – KevMo