Domanda

Per semplicità diciamo che ho due pagine flex mxml.

form.mxml
button.mxml

Se la pagina form.mxml aveva il seguente codice, dovrebbe funzionare correttamente:

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

Ma se il codice fosse simile:

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

come posso effettuare una chiamata da button.mxml per cambiare form.mxml

---- un po 'più di dettagli ---

La mia pagina in realtà assomiglia a questa: dove query: AdvancedSearchFields include fondamentalmente un modulo flessibile nella pagina e voglio che mostri / nasconda la vista personalizzata di seguito al termine della ricerca.

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

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
È stato utile?

Soluzione

È possibile scrivere un metodo personalizzato che gestisce gli eventi clic sui pulsanti e genera un evento personalizzato. Quindi in form.mxml puoi gestire quell'evento.

Suddividerlo in questo modo è un po 'più pulito, poiché fa funzionare il file button.mxml da solo. Il fatto che Button.mxml abbia un riferimento diretto al tuo modulo provoca un accoppiamento stretto tra i due e in genere dovresti evitare l'accoppiamento stretto.

EDIT: ho appena avuto un altro pensiero che evita anche l'accoppiamento stretto ed è un po 'più semplice:

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

Questo essenzialmente emula l'utilizzo di un evento personalizzato utilizzando l'associazione variabile. Ogni volta che la variabile showForm nei pulsanti cambia la proprietà visibile di SelectView verrà aggiornata tramite i collegamenti. Questo è più leggero rispetto alla creazione di un evento personalizzato (anche se penso che gli eventi personalizzati siano un po 'meglio di un design per esso).

Altri suggerimenti

La tua classe button.mxml deve avere un riferimento all'istanza della classe 'form' che sarà interessata. Quindi può operare direttamente su di esso:

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

Generalmente, il posto più logico per impostare questa variabile è nel genitore della tua classe Button .

Se hai bisogno di affrontare questo problema più spesso, suggerirei di utilizzare un framework MVC come PureMVC. È impostato in modo da disporre di un oggetto Mediatore che ascolta gli eventi dai componenti MXML, quindi invia una notifica che può essere raccolta da qualsiasi altro mediatore. Quindi quel mediatore può manipolare il proprio componente visivo in base alla notifica e ai dati associati.

Nel contesto di ciò che stai facendo (la versione semplice), stai bene con la soluzione di base. Ma una volta che hai a che fare con quattro o cinque o più componenti con molta logica, non sarai affatto contento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top