4

私のWebサービス呼び出しを処理するためにactionScriptクラスを書いています。結果を取得するときに、メインの mxml アプリケーションでセッター メソッドを呼び出したいと考えています。私の問題は、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 は、MyWrapperClass が作業を終了したときに通知されるように ( を使用して) サブスクライブするだけaddEventListener()であり、その後、独自の作業を行います。webserviceCompleteMyWrapperClass は、Main.mxml の実装の詳細について何も知りません。また、Main.mxml は、イベントをディスパッチし、パブリックdoWork()メソッドを公開すること以外、MyWrapperClass について何も知りません。疎結合と情報隠蔽の動作。

幸運を!

于 2009-02-04T13:00:08.350 に答える
6

クラスがコンポーネント ツリーに追加された UIComponent である場合、そのparentApplication属性を使用できます。それ以外の場合は、静的Application.application属性を使用しますが、アプリケーションの初期化が完了した後でのみ使用してください。それより前は、フィールドはnull. プライベート フィールドとメソッドには明らかにアクセスできません。明示的な s を使用して MXML 部分で宣言された要素idは public です。

ただし、このような呼び出しを追加すると、厳密なバインディングが作成されます。代わりにイベントをディスパッチし、メイン アプリケーションでこのイベントを処理することを検討してください。

于 2009-02-04T09:22:37.447 に答える
1

誰かが同じ問題を抱えている場合:

mx.core.FlexGlobals.topLevelApplication.YOUR_FUNCTION

main.mxml 内のパブリック関数にアクセスするための構文です。

于 2010-07-22T06:44:41.453 に答える