4

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

4

3 回答 3

7

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 文件是这样的:

<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()是如何私下声明的——它不是由MyWrapperClass. Main.mxml 只是简单地订阅(用addEventListener())在 MyWrapperClass 完成它的工作时得到通知,然后做它自己的工作;MyWrapperClass 对 Main.mxml 的实现细节一无所知,Main.mxml 除了调度一个webserviceComplete事件并公开一个公共doWork()方法之外,对 MyWrapperClass 也一无所知。松散耦合和信息隐藏在行动中。

祝你好运!

于 2009-02-04T13:00:08.350 回答
6

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

但是,添加这样的调用会创建一个严格的绑定。您可能需要考虑分派一个事件,并在主应用程序中处理此事件。

于 2009-02-04T09:22:37.447 回答
1

如果有人遇到同样的问题:

mx.core.FlexGlobals.topLevelApplication.YOUR_FUNCTION

是访问 main.mxml 中公共函数的语法。

于 2010-07-22T06:44:41.453 回答