Frage

Der Einfachheit halber können sagen, ich habe zwei flex mxml Seiten.

form.mxml
button.mxml

Wenn die form.mxml Seite den folgenden Code hatte, sollte es funktionieren:

<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;>

Aber wenn der Code ist wie:

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;>

Wie kann ich einen Anruf von button.mxml machen form.mxml

ändern

---- ein bisschen mehr Details ---

Meine Seite sieht tatsächlich wie folgt aus: wo Abfrage: AdvancedSearchFields ist grundsätzlich eine flexible Form in die Seite, einschließlich, und ich möchte es / um zu zeigen, die benutzerdefinierte Ansicht unten verstecken nachdem die Suche abgeschlossen ist.

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

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
War es hilfreich?

Lösung

Sie können eine benutzerdefinierte Methode schreiben, die auf die Schaltfläche klicken Ereignisse behandelt und wirft ein benutzerdefiniertes Ereignis. Dann in form.mxml können Sie das Ereignis behandeln.

Splitting es sich wie das ist ein bisschen sauberer, da es die button.mxml Datei Arbeit auf seinem eigenen macht. Mit Button.mxml einen direkten Bezug haben, um Ihre Form bewirkt eine enge Kopplung zwischen den beiden, und in der Regel sollten Sie eng Kopplung vermeiden.

EDIT: Ich hatte gerade einen anderen Gedanken, die auch eng Kopplung und ist ein wenig einfacher vermeidet:

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;">

Dieses emuliert im Wesentlichen eines benutzerdefiniertes Ereignis mit durch variable Bindung verwenden. Jedes Mal, wenn die Showform Variable in Tasten, um die Visible-Eigenschaft des Select verändert wird über die Bindungen aktualisiert werden. Dies ist leichterer als ein benutzerdefiniertes Ereignis zu schaffen (obwohl ich glaube, benutzerdefinierte Ereignisse ein bisschen besser von einem Design für sie sind).

Andere Tipps

Ihre button.mxml Klasse muss einen Verweis auf die Instanz der ‚Form‘ Klasse hat, die betroffen sein werden. Dann kann es auf sie arbeiten direkt an:

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;">

Im Allgemeinen ist der logischste Ort, um diese Variable zu setzen, ist in der Mutter Ihrer Button Klasse.

Wenn Sie sich mit diesem Problem befassen müssen öfter, würde ich vorschlagen, einen MVC-Framework wie PureMVC verwenden. Es ist so eingerichtet, dass Sie ein Mediator Objekt, das für Veranstaltungen von MXML-Komponenten zuhört, dann eine Benachrichtigung sendet, die von einem anderen Vermittler aufgenommen werden können. Dann, dass Mediator kann seine eigene visuelle Komponente manipuliert basierend auf der Benachrichtigung und die dazugehörigen Daten.

Im Rahmen dessen, was Sie tun (die einfache Version), sind Sie mit der Basislösung in Ordnung. Aber sobald Sie mit vier oder fünf oder mehr Komponenten mit viel Logik zu tun hat, werden Sie nicht glücklich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top