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

标签 apache-flex actionscript mxml

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

相关文章:

apache-flex - BlazeDS Servlets 和 Http Servlets 之间的 session 共享

apache-flex - Flex NumericStepper 在 10 以下的数字上带有前导 0?

actionscript - 逗号格式数字

flash - 使用 flash 录制视频并将视频文件发送到服务器

css - 如何在 flex 4 的 css 文件中设置 backgroundImage 属性?

apache-flex - 如何将flex与mysql连接?

apache-flex - 如何将 3 位 HTML 十六进制颜色转换为 6 位 flex 十六进制颜色

javascript - 通过.swf文件从网页中获取标题标签的内容

apache-flex - 使用 Flex SDK mxmlc 解析组件库

apache-flex - Flex 弹出窗口管理器,在弹出窗口外按下鼠标可删除弹出窗口