가능한 경우 도구 설명을 포함하여 팝업이 표시되는 것을 감지하려고합니다. 이유는 팝업이 나타나면 Stage * 구성 요소 (StageWebView, StageVideo, StageText 등)를 숨기거나 고정 (스냅 샷 캡처)해야합니다.팝업 관리자 클래스에서 이벤트를 수신하는 방법이 있습니까?
답변
정말 쉬운 방법은 없습니다. 당신이 할 수있는 일은 이것이다 : 당신이
- 는
- 이 응용 프로그램에 이벤트를 전달하게 사용자 정의 PopUpManager를 만들
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;
이 상당히 쉬울 것이다 기본 구현
대신 클래스를 사용하는 플렉스에게
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() 메소드가 있습니까? 우리의 구현을 등록하는 데 사용한 Singleton 클래스는 등록한 모든 클래스가 싱글 톤이기 때문에 'getInstance'라는 메서드를 가질 것으로 기대하기 때문입니다. 이 메서드를 호출하려고 시도하고 존재하지 않는 경우 충돌합니다. 싱글 톤이 무엇인지 모르는 경우, 그냥 구글. 수많은 정보를 찾을 수 있습니다.
추신 : 실제로이 질문을 해결하기 위해 새로운 것을 배웠습니다 (감사합니다).
내 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. 자바 스크립트에서 콘솔 이벤트를 수신하는 방법이 있습니까?
- 2. div 오버플로 이벤트를 수신하는 방법이 있습니까?
- 3. 프로토 타입에는 dom 객체 이벤트를 수신하는 것을 평가하는 방법이 있습니까?
- 4. Android : 스크롤 이벤트를 수신하는 방법?
- 5. 레일스에서 XMPP를 통해 메시지를 수신하는 방법이 있습니까?
- 6. 문제 스레드에서 이벤트를 수신하는 동안
- 7. android 하드웨어 이벤트를 수신하는 방법
- 8. 서비스에서 셸 이벤트를 수신하는 방법
- 9. 플렉스 : ItemRenderer에서 이벤트를 수신하는 방법
- 10. 플렉스 팝업 관리자
- 11. flash.display.DisplayObjectContainer numChildren 속성의 변경 사항을 수신하는 방법이 있습니까?
- 12. log4net이 로깅을 중지하면 이벤트를 수신하는 방법
- 13. viewDidUnload 이벤트를 트리거하는 방법이 있습니까?
- 14. window.open 이벤트를 제거하는 방법이 있습니까?
- 15. ASP.NET에서 IIS 종료 이벤트를 수신하는 방법
- 16. Visual Studio 코드 모델 이벤트를 수신하는 방법?
- 17. 콘솔 응용 프로그램에서 키보드 이벤트를 수신하는 방법
- 18. Harmattan : 들어오는 SMS 이벤트를 수신하는 방법
- 19. 스크립트를 삽입하여 activeX 이벤트를 수신하는 방법은 무엇입니까?
- 20. 내 jquery 플러그인 외부에서 이벤트를 수신하는 방법?
- 21. 부모 클래스에서 만든 변수를 자식 클래스에서 사용하는 방법이 있습니까?
- 22. ComponentListener보다 componentShown/componentHidden 이벤트를 수신하는 방법은 무엇입니까?
- 23. 새로 추가 된 객체의 이벤트를 수신하는 jquery
- 24. C#에서 Windows 이벤트를 수신하는 방법?
- 25. GWT 테이블에서 키보드 이벤트를 수신하는 방법은 무엇입니까?
- 26. Django 맞춤 관리자 클래스에서 다른 모델 관리자 코드 사용
- 27. TriggerAction 클래스에서 상속 할 수있는 방법이 있습니까?
- 28. Java의 부모 클래스에서 함수를 호출하는 방법이 있습니까?
- 29. ContentControl이 ContentTemplate 내부의 라우트되지 않은 이벤트를 수신하는 방법
- 30. 추상 메소드를 수신하는 방법은 무엇입니까?
감사합니다. 나는 새로운 것을 배울 수있어서 기쁘다. ;) 당신 말이 맞아요. 이 방법은이를 수행하는 방법이지만이 기능의 범위를 벗어납니다. systemManager addChild 또는 addedToStage 이벤트를 수신하는 것은 어떻습니까? systemManager numOfElements 또는 numOfChildren이 바인드 가능합니까? systemManager.numOfElements <1에 가시성을 바인딩 할 수 있습니까? –
학습에서 Singleton.registerClass가 어떤 클래스에서 작동하는지 알고 있습니까? 내 악의적 인 목적으로 사용할 수 있습니까? –
추가 할 댓글이 1 개 더 있습니다. PopUpManager가 구현을 가리킬 때 공개 선언이 작동하지 않으므로이 정보를 찾은 것이 좋습니다. –