Flex:跨mxml页面访问函数/组件

3

为了简单起见,假设我有两个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;>

但是如果代码像这样:
 <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

---- 更多细节 ---

我的页面实际上是这样的:其中query:AdvancedSearchFields基本上将flex表单包含在页面中,我希望在搜索完成后显示/隐藏下面的自定义视图。

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

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
3个回答

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的可见属性将被更新。这比创建自定义事件更轻量级(尽管我认为自定义事件在设计方面更好一些)。


尽管我的答案可以工作,但这个解决方案更加简洁(且耦合度更低)。干得好。 - Matt Dillard
嘿,你的回答给了我绑定解决方案的灵感,非常有帮助。 :) - Herms

0

如果你需要经常处理这个问题,我建议使用像PureMVC这样的MVC框架。它被设置成有一个中介者对象来监听来自MXML组件的事件,然后发送一个通知,可以被任何其他中介者接收。然后那个中介者可以根据通知和相关数据操纵自己的可视化组件。

在你所做的事情的背景下(简单版本),基本解决方案是可以的。但是一旦你处理四个或五个或更多具有大量逻辑的组件,你将会非常不满意。


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

这将导致表单和按钮组件之间存在紧密耦合。它们直接引用彼此,通常是一个不好的想法。 - Herms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接