0

私が遭遇した例からいくつかのコードを動作させようとしています。ほとんどの機能は動作しますが、カスタム イベントをディスパッチしようとすると失敗します。現時点で、イベントをディスパッチしようとしているコードは、amf リモート処理を処理するクラス内にあります。

この例では、ディスパッチのために次の行が含まれています。

Application.application.dispatchEvent(new  
RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"));

しかし、application.applicationが「この行に複数のマーカーがあります:-未定義のプロパティアプリケーションへのアクセス」が何であるかがわからないため、それは失敗します

これは、これがモバイル アプリ用に書かれていないためだと思います。ディスパッチャを EventDispatcher に変えてみた

EventDispatcher(
new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE, "worked"));

しかし、私はこのエラーを受け取ります:

TypeError: エラー #1034: 型強制に失敗しました: events::RemoteResultEvent@18337731 を flash.events.EventDispatcher に変換できません。

これは、カスタム イベント RemoteResultEvent.as のコードです。

package events
{

import flash.events.Event;
public class RemoteResultEvent extends Event {

    public static var USER_UPDATE_COMPLETE:String = "UserUpdateComplete";
    public var message:String;

    public function RemoteResultEvent(eventType:String, message:String) {
        super(eventType, false, false);
        this.message = message;
    }

}
}

私はフレックスとこのタイプの開発に慣れていないので、暗闇の中でぶらぶらしているので、本当にばかげたことをしている可能性があります。どんな助けでもありがたく受け取られます。

ありがとう

ヤクノ

4

1 に答える 1

3

一般的に、イベントのディスパッチについて混乱しているようです。

イベントは、EventDispatcher を拡張する、または EventDispatcher を持つ任意の Flex クラスでディスパッチできます。Application を含むほとんどの Flex コンポーネントは、EventDispatcher を拡張します。イベントをディスパッチするには、次のようにするだけで正しい軌道に乗っています。

dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"));

これにより、現在のクラスからイベントがディスパッチされます。MXML で作成されたものを含め、すべての Flex UI コンポーネントをクラスと見なすことができるわけではありません。

あなたがしようとしているのは、メイン レベルのアプリケーションでイベントをディスパッチすることです。これは恐ろしいカプセル化違反ですが、実行可能です。汎用オブジェクトを取得しないように、アプリケーションとしてキャストする必要があります。このような:

(Application.application as Application).dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test")); 

Flex 4 以降、このアプローチは推奨されていません。代わりにFlexGlobals.topLevelApplicationを使用します。

(FlexGlobals.topLevelapplication as Application).dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"))

あなたは言いませんが、モバイル プロジェクトに参加していることをほのめかしています。もしそうなら、クラスに MX コンポーネント付きの SWC を明示的に追加しない限り、mx Application クラスが利用可能になるとは思いません。Application プロパティを持たない Spark アプリケーションにアクセスする必要があります。そのため、エラーが発生する可能性があります。

使用する適切なアプリケーションを必ずインポートしてください。

import spark.components.Application 

Spark Applicationクラスの詳細。

于 2011-11-10T15:30:04.780 に答える