当前位置:  开发笔记 > 编程语言 > 正文

flex 3从actionscript代码访问main mxml

如何解决《flex3从actionscript代码访问mainmxml》经验,为你挑选了2个好方法。

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



1> Christian Nu..:

David是对的 - 虽然您可以静态地从应用程序的任何位置访问Application.mxml对象的公共成员,但设计方面有点禁止.最好是争取对象之间的松散耦合,而在Flex习惯用法中完成的方式通常是扩展EventDispatcher和分派事件.例如,您的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文件如下:


    

在这种情况下,最终结果是相同的 - 完成Web服务加载会触发Main.mxml中的函数.但请注意如何mywrapper_webServiceComplete()私下宣告 - 它不是直接调用的MyWrapperClass.addEventListener()当MyWrapperClass完成其工作时,Main.mxml只是订阅(with )以获得通知,然后自己完成工作; MyWrapperClass对Main.mxml的实现细节一无所知,除了调度webserviceComplete事件外,Main.mxml也不了解MyWrapperClass ,并公开了一个公共doWork()方法.松散的耦合和信息隐藏在行动中.

祝好运!



2> David Hanak..:

如果您的类是添加到组件树的UIComponent,那么您可以使用其parentApplication属性.否则,请使用静态Application.application属性,但仅在应用程序初始化完成后才使用.早于此,该领域是null.显然无法访问私有字段和方法.MXML部分中使用显式ids 声明的元素是公共的.

但是,添加此类调用会创建严格的绑定.您可能需要考虑调度事件,并在主应用程序中处理此事件.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有