我正在编写一个 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/