2009-08-12 3 views
0

Les valeurs de composants Flex sont initialisées par la méthode init. Dans un flux d'application, Comment actualiser une valeur de données de composant mxml; Comme init est appelé au démarrage lui-même seulement.Meilleure pratique pour définir et mettre à jour un composant MXML dans une application Flex

Exemple de composant MXML peut être aussi simple que l'étiquette de bouton ou d'un texte aussi complexe que répéteur dont le fournisseur de données est un service Web (signifie un nouveau quesy doit être fait pour extraire les données et actualiser la dataprovider du répéteur)

+0

Veuillez donner un exemple du type de données que vous souhaitez actualiser. –

Répondre

0

Si le fournisseur de données est une collection ou un tableau, il se met à jour automatiquement lorsque des éléments sont ajoutés ou supprimés de la collection. Vous pouvez écouter l'événement CollectionEvent.CollectionChange pour voir quand une collection change.

Je ne suis pas vraiment sûr de ce que vous voulez dire? Êtes-vous sur la liaison?

+0

Les tableaux ne déclenchent pas d'événements lors de changements internes, par ex. quand un article est poussé dessus et donc votre déclaration est incorrecte. Toutefois, ArrayCollection déclenche des événements et doit être utilisé comme vous le dites. –

0

Si vous souhaitez réinitialiser le contrôle entier, vous pouvez créer un événement "reset" et demander au gestionnaire de réinitialisation d'exécuter le même comportement que le code init.

C'est le meilleur que je peux faire sans plus de détails ...

+0

pourrait me fournir un code de modèle d'un composant répéteur mxml ou un composant. cela clarifierait l'idée –

0

vous devez vous créer setters et getters pour les propriétés que vous souhaitez modifier et un rafraîchissement est nécessaire par la suite. par exemple:

private var _tmp : String = ''; 
public function set tmp(val : String) : void { 
     this._tmp = val; 
     this.doOtherDataRefreshNeeded(); 
} 
public function get tmp() : String { 
     return this._tmp; 
} 

et de cette façon, chaque fois que le code qui utilise ce composant et doit mettre à jour sa propriété tmp. le setter sera appelé et il y aura beaucoup d'autres choses à côté de l'attribution de la valeur.

Pour les composants mxml simples en tant que textes et entrées, utilisez les liaisons {} pour leurs valeurs de données. ceux-ci devraient mettre à jour dès que les données changent. sinon, appelez la méthode .invalidateNow() pour forcer la mise à jour.

+0

Ce n'est en fait pas vraiment les meilleures pratiques. Le setter peut être appelé dix, cent, voire milliers de fois au cours d'une trame, ce qui signifierait que plusieurs calculs inutiles sont effectués. Les meilleures pratiques consiste à appeler l'une des méthodes d'invalidation (éventuellement invalidateProperties) puis, au cours de la phase de validation (commitProperties), à effectuer le travail correspondant à l'actualisation. Cela garantit que, bien que la méthode d'invalidation puisse être appelée plusieurs fois pendant une trame, le travail réel n'est exécuté qu'une seule fois. –

+0

Je pense que invalidateProperties est la méthode par défaut pour obtenir un meilleur contrôle sur les composants de l'interface utilisateur –

0

Utiliser la méthode ValidateNow() dans le composant mxml dans la méthode de mise à jour

Questions connexes