Pregunta

Por simplicidad, digamos que tengo dos páginas flex mxml.

form.mxml
button.mxml

Si la página form.mxml tenía el siguiente código, debería funcionar bien:

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

Pero si el código fuera así:

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

¿cómo puedo hacer una llamada desde button.mxml para cambiar form.mxml

---- un poco más de detalles ---

Mi página realmente se ve así: donde query: AdvancedSearchFields básicamente incluye un formulario flexible en la página, y quiero que muestre / oculte la vista personalizada a continuación después de que se complete la búsqueda.

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

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
¿Fue útil?

Solución

Podría escribir un método personalizado que maneje los eventos de clic del botón y genere un evento personalizado. Luego, en form.mxml puedes manejar ese evento.

Dividirlo así es un poco más limpio, ya que hace que el archivo button.mxml funcione por sí solo. Hacer que Button.mxml tenga una referencia directa a su formulario provoca un acoplamiento estrecho entre los dos y, en general, debe evitarlo.

EDITAR: acabo de tener otro pensamiento que también evita el acoplamiento estrecho y es un poco más 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;">

Esto emula esencialmente el uso de un evento personalizado mediante el uso del enlace variable. Cada vez que la variable showForm en los botones cambia, la propiedad visible de SelectView se actualizará a través de los enlaces. Esto es más liviano que crear un evento personalizado (aunque creo que los eventos personalizados son un poco mejor diseño para él).

Otros consejos

Su clase button.mxml debe tener una referencia a la instancia de la clase 'form' que se verá afectada. Entonces puede operar en él directamente:

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, el lugar más lógico para establecer esta variable es el padre de su clase Button .

Si necesita tratar este problema con más frecuencia, le sugiero que use un marco MVC como PureMVC. Está configurado para que tenga un objeto Mediador que escuche los eventos de los componentes MXML y luego envíe una notificación que cualquier otro mediador pueda recoger. Entonces ese mediador puede manipular su propio componente visual basado en la notificación y sus datos asociados.

En el contexto de lo que está haciendo (la versión simple), está de acuerdo con la solución básica. Pero una vez que esté lidiando con cuatro o cinco o más componentes con mucha lógica, no será feliz en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top