2012-04-26 13 views
0

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

私は、イベントリスナーをスキンのcontentGroupに追加しようとしましたが、ちょうどキックのためです。驚くことではありませんでした。

アイデア?

ありがとうございます。

答えて

4

どのコンポーネントのスキンを設計したいですか?

WindowedApplicationのスキンを設計していて、WindowedApplicationクラスから発生したイベントをリスンする場合は、次にはい。スキンのhostComponent変数を使用して、WindowedApplicationのインスタンスで前記イベントをリッスンすることができます。

私はhostComponentプロパティがスキンメタデータに基づいて自動的に作成されると考えています。モバイルスキンを作成している場合を除き、ドキュメントを手動で作成するよう指示します。コード内のいくつかの将来の時点で

public var hostComponent : WindowedApplication; 

:概念的には、このように

hostComponent.addEventListener('myCustomEvent',myEventListener); 

私はhostComponentプロパティが設定されているのFlexコンポーネントのライフサイクルのどの時点ではわかりません。 creationCompleteイベント中にイベントリスナーを追加できます。おそらくライフサイクルのかなり早い時期に起こります。

それはあなたがどこでも、あなたのコード内のメインアプリケーションでイベントをリッスンすることができます何をしようとしてではない場合 - スキンクラスを含む - FlexGlobals.topLevelApplication変数を参照することにより:

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

これはカプセル化の中断と見なされ、私はそれを推薦するとは思わない。イベントは通信に使用する必要があります。メソッドやプロパティを実行して通信する必要があります。この場合、イベントを使用して通信しています。

スキンクラスがhostComponentのイベントをリッスンすることは、横向きに動作するようなものです。上または下ではありません。私はそれについても混ざり合っている。

+0

ちょうど私が必要なもの!ありがとうございました!それと一緒に行く良い説明! –

+0

それが価値があることについては、私はそれの99%であなたに完全に同意します。最後の1%は、ホストからの皮膚のイベントを許可しています。私はこれは大丈夫だと言って、親子ルールを破ることはありません。ホストは簡単に新しいスキンを交換することができますが、壊れませんが、ホストからのイベントをスキンから取得することで、逆に進むことは難しくなります。これは簡単に "中断"するか、それはイベントを通して起こっています - これはまだハードリファレンスを持たない "カプセル化堀"です - (少なくとも、私が言ったようにすべきではありません - トリッキー)。 –

関連する問題