0

Flex 4内で、メインアプリケーション(この場合は<s:WindowedApplication>クラスのインスタンス)によってディスパッチされるイベントをリッスンできるようにスキンを設計する方法はありますか?

contentGroupキックのためだけに、スキンにイベントリスナーを追加してみました。当然のことながら、それは機能しませんでした。

何か案は?

お時間をいただきありがとうございます。

4

1 に答える 1

4

どのコンポーネントのスキンをデザインしたいですか?

WindowedApplicationのスキンを設計していて、WindowedApplicationクラスから発生したイベントをリッスンしたい場合。その後、はい。スキンのhostComponent変数を使用して、WindowedApplicationのインスタンスで上記のイベントをリッスンできます。

hostComponentプロパティは、スキンメタデータに基づいて自動的に作成されると思います。モバイルスキンを作成している場合を除き、ドキュメントには手動で作成するように指示されています。概念的には次のようになります。

public var hostComponent : WindowedApplication;

コードの将来のある時点で:

hostComponent.addEventListener('myCustomEvent',myEventListener);

Flexコンポーネントライフサイクルのどの時点でhostComponentプロパティが設定されているのかわかりません。CreationCompleteイベント中に問題なくイベントリスナーを追加できると確信しています。しかし、おそらくライフサイクルのかなり早い段階でも。

それが目的ではない場合は、FlexGlobals.topLevelApplication変数を参照することで、コード内の任意の場所(スキンクラスを含む)でメインアプリケーションのイベントをリッスンできます。

var tla : WindowedApplication = FlexGlobals.topLevelApplication as WindowedApplication;
tla.addEventListener('myCustomEvent',myEventListener);

これはカプセル化の中断と見なされ、推奨するかどうかはわかりません。イベントは通信に使用する必要があります。ただし、実行中のメソッドとプロパティを使用して通信する必要があります。この場合、イベントを使用して通信します。

スキンクラスにhostComponentのイベントをリッスンさせることは、上下ではなく、横向きに作業するようなものです。私もそれについて複雑な気持ちを持っています。

于 2012-04-26T02:35:46.870 に答える