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

问题描述:

为了简单起见,可以说我有两个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"> 

您可以编写处理按钮单击事件并引发自定义事件的自定义方法。然后在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属性,这些属性将通过绑定进行更新。这比创建自定义事件重量轻(尽管我认为自定义事件对它的设计稍微好一些)。

+0

虽然我的答案会起作用,但这个解决方案更简洁(并且耦合度更低)。好工作。 – 2008-10-09 16:00:41

您的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类的父。

+0

这会在窗体和按钮组件之间产生紧密耦合。他们都直接引用另一个,这通常是一个坏主意。 – Herms 2008-10-09 15:58:01

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

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