Pergunta

Para simplificar, digamos que eu tenho duas páginas MXML Flex.

form.mxml
button.mxml

Se a página form.mxml teve o seguinte código, ele deve funcionar bem:

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

Mas se o código era como:

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

como posso fazer uma chamada de button.mxml para mudar form.mxml

---- um pouco mais detalhes ---

A página do meu realmente se parece com esta: onde query: AdvancedSearchFields é, basicamente, incluindo uma forma flexível dentro da página, e eu quero isso para mostrar / esconder a exibição personalizada abaixo após a conclusão da pesquisa.

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

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

Solução

Você poderia escrever um método personalizado que manipula os eventos de clique de botão e levanta um evento personalizado. Então, em form.mxml você pode lidar com esse evento.

Dividir-lo como este é um pouco mais limpo, uma vez que torna o trabalho de arquivo button.mxml por conta própria. Tendo Button.mxml tem uma referência direta à sua forma provoca um tight-acoplamento entre os dois, e, geralmente, você deve evitar tight-acoplamento.

EDIT: Eu só tinha outro pensamento que também evita tight-acoplamento e é um pouco mais simples:

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

Isto essencialmente emula usando um evento personalizado usando variável vinculativo. Toda vez que a variável showForm em botões altera a propriedade visível do Seleccione Ver será atualizado através das ligações. Esta é mais leve do que criar um evento personalizado (embora eu acho que eventos personalizados são um pouco melhor de um projeto para ele).

Outras dicas

Sua classe button.mxml deve ter uma referência para a instância da classe 'forma' que serão afetados. Então, ele pode operá-lo diretamente:

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

Geralmente, o lugar mais lógico para definir esta variável é no pai de sua classe Button.

Se você precisa lidar com este problema mais frequentemente, eu sugiro usar um framework MVC como PureMVC. É configurado para que você tenha um objeto Mediator que escuta para eventos de componentes MXML, em seguida, envia uma notificação que pode ser captado por qualquer outro mediador. Então isso mediador pode manipular o seu próprio componente visual com base na notificação e seus dados associados.

No contexto do que você está fazendo (a versão simples), você está bem com a solução básica. Mas uma vez que você está lidando com quatro ou cinco ou mais componentes com muita lógica, você não vai ser feliz em tudo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top