私は、ポップアップが表示されたとき(可能であればツールヒントを含む)を検出しようとしています。その理由は、ポップアップが表示されたときにStage *コンポーネント(StageWebView、StageVideo、StageTextなど)を非表示にする(スナップショットをキャプチャする)必要があるためです。ポップアップマネージャークラスのイベントをリッスンする方法はありますか?
答えて
これを達成する簡単な方法はありません。あなたは、クラスの代わりに、デフォルトの実装 を使用するには、Flexを伝えるどこでも
- :何ができることはこれです
我々は、我々はいくつかのカスタムを追加できるカスタムPopUpManagerのクラスを作成し、PopUpManagerの
をカスタムを作成します。機能性。あなたのケースでは、アプリケーション上でイベントをディスパッチして、displayList上のどこからでもそのイベントを聴くことができます。 Flexで使用されるデフォルトの実装であるPopUpManagerImplを拡張します。
public class MyPopupManager extends PopUpManagerImpl { private static var instance:IPopUpManager; static public function getInstance():IPopUpManager { if (!instance) instance = new MyPopupManager(); return instance; } override public function addPopUp( window:IFlexDisplayObject, parent:DisplayObject, modal:Boolean=false, childList:String=null, moduleFactory:IFlexModuleFactory=null):void { super.addPopUp(window, parent, modal, childList, moduleFactory); var app:IEventDispatcher = IEventDispatcher(FlexGlobals.topLevelApplication); app.dispatchEvent(new Event("popupAdded", true)); } }
ポップアップが表示されるたびに、バブリングイベントを送出するためにaddPopupメソッドをオーバーライドします。今のところgetInstance()メソッドは無視してください。私は後でそれに戻ります。あなたが知る必要があることは、FlashBuilderは、これらのクラスが隠されているとマークされているため、一部のインポートを自動処理しないことです。何も心配することができますが、手動でインポート文を書くためにする必要があります:
:import mx.managers.IPopUpManager; import mx.managers.PopUpManagerImpl;
これはかなり簡単だろうデフォルトの実装
するのではなく、あなたのクラスを使用するには、Flexに知らせます
import mx.core.Singleton; Singleton.registerClass("mx.managers::IPopUpManager", MyPopupManager);
唯一の問題は、Flexが既に実装を登録していて、 'preinitialize'でこれを実行しても、オーバーライドできないことです。したがって、Flexがブートストラップを開始する前にそれを行う必要があります。
public class RegisteringPreloader extends DownloadProgressBar { override public function initialize():void { super.initialize(); Singleton.registerClass("mx.managers::IPopUpManager", MyPopupManager); } }
DownloadProgressBarは、デフォルトのFlexプリローダーです。余分な登録コードを追加するだけです。今、このプリローダーを使用するようにアプリケーションを伝えることを忘れないでください:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" preloader="RegisteringPreloader" >
今MyPopupManagerがしなければならないん理由だけ
今
addEventListener("popupAdded", onPopupAdded); PopUpManager.addPopUp(new Panel(), this);
エクストライベント情報をリッスン静的なgetInstance()メソッドがありますか?これは、実装を登録するために使用したシングルトンクラスでは、登録するすべてのクラスがシングルトンであり、したがって 'getInstance'というメソッドを持つことを期待しているからです。このメソッドを呼び出そうとしますが、存在しなければクラッシュします。シングルトンが何であるかわからない場合は、ただグーグル。たくさんの情報が見つかります。
PS:私は実際にこの問題を解決しようとしている何か新しいことを学んだ(それのおかげで)。
私のためSpark
Application
私はRIAStarの答えにいくつかの変更を加える必要がありました。 preloader.initialize()
にカスタムクラスが見つかりませんでした(ApplicationDomain.currentDomain.getDefinition()
)ので、PRELOADER_DOC_FRAME_READY
イベントのイベントリスナーを追加しました。
package com.mydomain.preloaders {
import flash.display.Sprite;
import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.utils.getDefinitionByName;
import mx.core.Singleton;
import mx.events.FlexEvent;
import mx.preloaders.SparkDownloadProgressBar;
public class RegisteringPreloader extends SparkDownloadProgressBar {
public function RegisteringPreloader() {
}
public var preloaderSprite:Sprite;
override public function set preloader(value:Sprite):void {
super.preloader = value;
preloaderSprite = value;
value.addEventListener(FlexEvent.PRELOADER_DOC_FRAME_READY, preloaderCompleteHandler);
}
protected function preloaderCompleteHandler(event:Event):void {
var myCustomClass:Class;
var classPath:String;
var hasDefinition:Boolean;
preloaderSprite.addEventListener(FlexEvent.PRELOADER_DOC_FRAME_READY, preloaderCompleteHandler);
classPath = "com.domain.managers::MyClassImpl";
hasDefinition = ApplicationDomain.currentDomain.hasDefinition(classPath);
if (hasDefinition) {
myCustomClass = Class(getDefinitionByName(classPath));
Singleton.registerClass("mx.managers::ISingletonClass", myCustomClass);
}
}
}
}
残りのステップはRIAStar'sと同じです。
- 1. ボットフレームワークでリッスンするendConversationイベントはありますか?
- 2. 別のクラスのメソッド実行をリッスンする方法はありますか?
- 3. イベントのデリゲートを取得する方法はありますか
- 4. VB.Netスクリプトのイベントをリッスンしますか?
- 5. Googleマップでイベントをシミュレートする方法はありますか?
- 6. iAd:Ad foundイベントをキャッチする方法はありますか?
- 7. イベントをjQueryに委譲する方法はありますか?
- 8. Javascriptイベントを「レイヤーする」方法はありますか?
- 9. ツールヒントがMouseEnterイベントをトリガーする方法はありますか?
- 10. イベントをSquarespace AjaxLoaderにバインドする方法はありますか?
- 11. Karma-Mocha - DOMContentLoadedイベントをリッスンするメソッドをテストする方法
- 12. プロトタイプでは、domオブジェクトイベントをリッスンしているものを評価する方法はありますか?
- 13. サービスワーカーの「インストール」イベント内で「メッセージ」イベントを待つ方法はありますか?
- 14. TomcatがHTTPポートをリッスンするのをプログラムで一時停止する方法はありますか
- 15. node.jsアプリケーションはポートでリッスンする必要がありますか?
- 16. UITableViewCellのスイッチからイベントをキャプチャする方法はありますか?
- 17. 親テーブルのトリガもPostgresのすべての子テーブルをリッスンする方法はありますか?
- 18. Railsのビルトインサーバがデフォルトで0.0.0.0でリッスンするのを止める方法はありますか?
- 19. そのチェックボックスでのみイベントを処理する方法はありますか?
- 20. ビデオがHTTP POSTイベント(またはその他のイベント)をトリガーする方法はありますか
- 21. Internet ExplorerエクステンションにCookieが設定されているのをリッスンする方法はありますか?
- 22. UIViewからWillRotateToInterfaceOrientationイベントをキャッチする方法はありますか?
- 23. ウィンドウの最小化イベントをトラップする方法はありますか?
- 24. cmdでイベントの時刻を表示する方法はありますか?
- 25. konva: `tap`イベントのパラメータを調整する方法はありますか?
- 26. コンテナのみ.click()イベントをバインドする方法はありますか
- 27. Viewのイベントでストーリーボードをトリガーする方法はありますか?
- 28. MDIチャイルドロードのイベントを初めて捕捉する方法はありますか?
- 29. onFocusイベントをNativeScriptのTextFieldにバインドする方法はありますか?
- 30. wicketラジオボタンのonclick(onchange)イベントを追加する方法はありますか?
ありがとうございました。私は何か新しいことを学ぶのを助けることができてうれしいです。 ;) あなたが正しいです。この方法はこれを行う方法ですが、この機能の範囲外です。 systemManager addChildイベントまたはaddedToStageイベントのリスニングはどうですか? systemManager numOfElementsまたはnumOfChildrenはバインド可能ですか?私は可視性をsystemManager.numOfElements <1にバインドできますか? –
あなたの学習で、Singleton.registerClassがどんなクラスでも動作するかどうか知っていますか?私自身の邪悪な目的のためにそれを使うことはできますか? –
もう1つのコメントを追加してください。 PopUpManagerが実装を指し示しているので、オープン宣言は機能しません。 –