2

私は最近、flex のフレームワークとして Mate に変更しました。ただし、いくつかの問題が発生しています。methodInvoker タグを介して生成されたクラスからイベントをディスパッチする方法を知りたいです。

<resultHandlers>
        <MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>

次に、クラスでイベントをディスパッチしたいと思います。

public function setCurrentUser(calUser:Object):void{
        if(calUser != null){
            Model.instance.currentUser = calUser as CalUser;
            loadOnlineCalendars(Model.instance.currentUser);
        }
    }

    public function loadOnlineCalendars(calUser:CalUser):void{
        for(var i:int = 0 ; i<calUser.calConnectors.length; i++){//logic here
            dispatchEvent(new CalConnectorEvent(calUser.calConnectors as CalConnector,CalConnectorEvent.LOAD_ONLINE_CALENDAR_EVENT,true));
        }
    }

問題は、eventMap またはアプリケーション ルートでさえ、イベントをキャッチできないように見えることです。

誰かがメイトの経験があれば、いくつかの指針をいただければ幸いです。おそらく私はこれをすべて間違っています。サーバーから結果を取得したいだけです-結果を見て、結果に応じてサーバーに再度連絡してください。非常に単純なはずです。

イベントマップ:

            <resultHandlers>
            <MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>
            <ServiceResponseAnnouncer type="result"/>

            </resultHandlers>
            <faultHandlers>
            <ServiceResponseAnnouncer type="fault"/>

            </faultHandlers>
    </RemoteObjectInvoker>

4

3 に答える 3

7

通常は、イベント マップのディスパッチャーをオブジェクトに挿入します。

<MethodInvoker generator="{MyClass}" method="someMethod" arguments="{[a, b]}">
  <Properties dispatcher="{scope.dispatcher}"/>
</MethodInvoker>

内部Propertiesタグは、によって作成されるオブジェクトMethodInvokerのプロパティを設定します。プロパティは、メソッドが呼び出される前に設定されることが保証されます。

これが機能するためには、明らかに、クラスにdispatcher(または任意の名前で) という名前のパブリック プロパティが必要です。イベント マップ呼び出しでリッスンするイベントをディスパッチするにはdispatcher.dispatchEvent(...)

によって作成されたオブジェクトがMethodInvoker複数回使用される場合、たとえばマネージャーの場合、一般的なイディオムは、ObjectBuilderによってトリガーされる is an イベント ハンドラー ブロックを使用して作成することFlexEvent.INITIALIZEです。

<EventHandlers type="{FlexEvent.INITIALIZE}">
  <ObjectBuilder generator="{MyClass}" constructorArguments="{scope.dispatcher}"/>
</EventHandlers>

この例では、イベント ディスパッチャーがコンストラクター引数として挿入されますが、Propertiesと同様に内部タグを使用できますMethodInvoker

于 2009-01-27T08:13:29.873 に答える
4

hereを掘り下げた後、非ビュークラスからイベントを呼び出すことができないことがわかりました。そのフォーラムの投稿では、エレガントなソリューションについて説明し、簡単な回避策も提供しています。

Application.application.dispatchEvent(new CalConnectorEvent(calUser.calConnectors as CalConnector,CalConnectorEvent.LOAD_ONLINE_CALENDAR_EVENT,true));

しかし、フォーラムの投稿をチェックしてください-そこにはたくさんの肉があります.

于 2009-01-27T03:05:55.690 に答える
0

actionscriptのクラスから、イベントをディスパッチできます。そのためには、EventDispatcherクラスを拡張するか、ディスパッチャープロパティを使用してIEventInterfaceを実装する必要があります。ただし、バブリングは表示オブジェクトに固有のプロパティであるため、イベントはバブリングされないため、これは適切な方法ではありません。ターゲットフェーズ中にクラス自体でイベントを聞くことができます。他のノードにイベントをリッスンさせたい場合は、バブルする必要があります。したがって、Theoが回答したように、メイトフレームワークのディスパッチャーをクラスに渡す必要があります。これで、クラスからイベントをディスパッチできます。これは、データクラスからイベントをディスパッチするためのおそらく最良の方法です。詳細については、このリンクを参照してくださいhttp://www.developria.com/2010/05/pass-the-eventdispatcher-pleas.html

于 2012-10-18T11:24:07.727 に答える