gpt4 book ai didi

apache-flex - flex 3从actionscript代码访问主mxml

转载 作者:行者123 更新时间:2023-12-03 04:51:37 25 4
gpt4 key购买 nike

我正在编写一个 actionScript 类来处理我的 Web 服务调用。当我检索结果时,我想在我的主 mxml 应用程序中调用 setter 方法。我的问题是我不知道如何从我的actionscript 类访问我的主mxml 类的actionScript 部分中的方法,有什么想法吗?

最佳答案

David 是对的——虽然您可以从应用程序中的任何位置静态访问 Application.mxml 对象的公共(public)成员,但从设计角度来看,这有点禁忌。最好努力实现对象之间的松散耦合,在 Flex 习惯用法中实现的方式通常是扩展 EventDispatcher 并分派(dispatch)事件。例如,您的 WebService 包装器可能如下所示:

public class MyWrapperClass extends EventDispatcher
{
[Event(name="webserviceComplete", type="flash.events.Event")]

public function MyWrapperClass(target:IEventDispatcher=null)
{
super(target);
}

private function handleWebServiceLoadComplete(event:ResultEvent):void
{
dispatchEvent(new Event("webserviceComplete"));
}

public function doWork():void
{
// Load the service, etc., and ultimately call handleWebServiceLoadComplete()...
}
}

...以及您的 Main.mxml 文件,如下所示:

<mx:Script>
<![CDATA[

private function app_creationComplete(event:Event):void
{
var myWrapper:MyWrapperClass = new MyWrapperClass();
myWrapper.addEventListener("webserviceComplete", mywrapper_webServiceComplete, false, 0, true);
myWrapper.doWork();
}

private function mywrapper_webServiceComplete(event:Event):void
{
// Do the work you would've otherwise done in the public method
}

]]>
</mx:Script>

在这种情况下,最终结果是相同的——完成 Web 服务加载会触发 Main.mxml 中的函数。但请注意 mywrapper_webServiceComplete() 是如何私有(private)声明的——它不是由 MyWrapperClass 直接调用的。 Main.mxml 只是订阅(使用 addEventListener()),以便在 MyWrapperClass 完成其工作时收到通知,然后执行自己的工作; MyWrapperClass 对 Main.mxml 实现的细节一无所知,Main.mxml 也不知道有关 MyWrapperClass 的任何信息,除了它分派(dispatch) webserviceComplete 事件并公开一个公共(public) doWork() 方法。松散耦合和信息隐藏在行动中。

祝你好运!

关于apache-flex - flex 3从actionscript代码访问主mxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/510609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com