Question

Par souci de simplicité, disons que j’ai deux pages flex mxml.

form.mxml
bouton.mxml

Si la page formulaire.mxml contenait le code suivant, cela devrait fonctionner correctement:

<custom:SelectView dSource="{_thedata}" id="form" visible="false">
</custom:SelectView>

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

Mais si le code ressemblait à:

form.mxml

 <custom:SelectView dSource="{_thedata}" id="form" visible="false">
 </custom:SelectView>

button.mxml

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

comment puis-je passer un appel depuis button.mxml pour modifier form.mxml

---- un peu plus de détails ---

Ma page ressemble en réalité à ceci: où requête: AdvancedSearchFields inclut essentiellement un formulaire flex dans la page, et je souhaite qu'il affiche / masque la vue personnalisée ci-dessous une fois la recherche terminée.

<query:AdvancedSearchFields searchType="projects" searchCategory="advanced" visible="true" id="AdvancedSearch" />

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
Était-ce utile?

La solution

Vous pouvez écrire une méthode personnalisée qui gère les événements de clic de bouton et déclenche un événement personnalisé. Ensuite, dans form.mxml, vous pouvez gérer cet événement.

Le diviser comme ceci est un peu plus propre, car cela permet au fichier button.mxml de fonctionner tout seul. Le fait que Button.mxml ait une référence directe à votre formulaire provoque un couplage étroit entre les deux et vous devez généralement éviter le couplage étroit.

EDIT: Je viens d’avoir une autre idée qui évite également les couplages étroits et qui est un peu plus simple:

form.mxml

<custom:SelectView dSource="{_thedata}" id="form" visible="{buttons.showForm}">
</custom:SelectView>

<!-- include your buttons.mxml component using an ID of "buttons" -->

buttons.mxml

<mx:Script>
<![CDATA[
    [Bindable] public var showForm:Boolean = true;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="this.showForm=true;">
<mx:LinkButton label="Hide" id="lbHide" click="this.showForm=false;">

Ceci émule essentiellement en utilisant un événement personnalisé en utilisant une liaison variable. Chaque fois que la variable showForm dans les boutons change, la propriété visible de SelectView sera mise à jour via les liaisons. C'est plus léger que de créer un événement personnalisé (bien que je pense que les événements personnalisés sont un peu mieux conçus).

Autres conseils

Votre classe button.mxml doit avoir une référence à l'instance de la classe 'form' qui sera affectée. Ensuite, il peut opérer directement:

Button.mxml:

<mx:Script>
<![CDATA[
    [Bindable] public var myForm:MyFormClass;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="myForm.form.visible=true;">
<mx:LinkButton label="Show" id="lbHide" click="myForm.form.visible=false;">

Généralement, l'emplacement le plus logique pour définir cette variable est dans le parent de votre classe Button .

Si vous devez traiter ce problème plus souvent, nous vous suggérons d'utiliser un framework MVC tel que PureMVC. Il est configuré pour que vous ayez un objet Mediator qui écoute les événements des composants MXML, puis envoie une notification qui peut être récupérée par tout autre médiateur. Ce médiateur peut ensuite manipuler son propre composant visuel en fonction de la notification et des données associées.

Dans le contexte de ce que vous faites (la version simple), la solution de base vous convient. Mais une fois que vous aurez affaire à quatre ou cinq composants ou plus avec beaucoup de logique, vous ne serez plus du tout heureux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top