Flex:访问跨mxml页面的功能/组件

时间:2008-10-09 15:24:30

标签: flex mxml

为简单起见,我想说我有两个flex mxml页面。

form.mxml
button.mxml

如果form.mxml页面有以下代码,它应该可以正常工作:

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

但如果代码如下:

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

如何从button.mxml拨打电话以更改form.mxml

----更多细节---

我的页面实际上是这样的:其中查询:AdvancedSearchFields基本上包含一个flex形式到页面中,我希望它在搜索完成后显示/隐藏下面的自定义视图。

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

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">

3 个答案:

答案 0 :(得分:4)

您可以编写一个自定义方法来处理按钮单击事件并引发自定义事件。然后在form.mxml中,您可以处理该事件。

像这样拆分它有点干净,因为它使button.mxml文件自行工作。让Button.mxml直接引用你的表单导致两者之间的紧耦合,通常你应该避免紧耦合。

编辑:我只是想到了另一个想法,也避免了紧耦合,并且有点简单:

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

这实质上是通过使用变量绑定来模拟自定义事件。只要按钮中的showForm变量发生更改,SelectView的visible属性就会通过绑定进行更新。这比创建一个自定义事件更轻(虽然我认为自定义事件对它的设计有点好)。

答案 1 :(得分:0)

您的button.mxml类必须引用将受影响的'form'类的实例。然后它可以直接对它进行操作:

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

通常,设置此变量的最合理位置是Button类的父级。

答案 2 :(得分:0)

如果你需要更频繁地处理这个问题,我建议使用像PureMVC这样的MVC框架。它的设置使您有一个Mediator对象可以侦听来自MXML组件的事件,然后发送一个可以被任何其他介体拾取的通知。然后,该中介可以根据通知及其相关数据操纵自己的可视组件。

在您正在做的事情(简单版本)的背景下,您可以使用基本解决方案。但是一旦你处理了四个或五个或更多具有大量逻辑的组件,你就不会感到高兴。