ResourceManagerImpl
은 final
이 아니기 때문에 확장 할 수있는 것이 아니라, 기본 구현 대신 애플리케이션으로 구현을 등록 할 수 있어야한다는 점이 문제입니다. 그리고 이것을하는 것은 약간 까다 롭습니다.
그래서 먼저 구현을 작성합니다
public class MyResourceManager extends ResourceManagerImpl {
private static var instance:IResourceManager;
static public function getInstance():IResourceManager
{
if (!instance) instance = new MyResourceManager();
return instance;
}
override public function getStringArray(bundleName:String,
resourceName:String,
locale:String = null):Array {
//do your stuff
}
}
그래서 우리는
getStringArray
방법을 재정의했습니다. 에 대해서도 동일한 작업을 수행했음을 알 수 있습니다.
ResourceManagerImpl
대신
MyResourceManager
대신 새 인스턴스를 반환하기를 원하기 때문입니다 (
static
메서드이므로
override
으로 표시하지 않아도됩니다). 또한 사용중인 클래스 중 일부가 '제외됨'으로 표시되어 일부 import 문을 수동으로 작성해야 할 수도 있습니다.
이제는 ResourceManagerImpl
대신 MyResourceManager
을 사용하도록 Flex에 알려야합니다. 우리는 다음 코드를 사용하여이 작업을 수행 할 수 있습니다
import mx.core.Singleton;
Singleton.registerClass("mx.resources::IResourceManager", MyResourceManager);
문제는 우리가 플렉스하기 전에이 작업을 수행해야한다는 것입니다 ResourceManagerImpl
를 등록이 등록되어 일단 당신이 그것을 무시할 수 없습니다 때문입니다. 이를 위해 등록을 수행하는 사용자 정의 프리 로더를 생성해야합니다 (슬프게도 응용 프로그램의 '사전 초기화'단계가 빠르지 않습니다).
public class RegisteringPreloader extends DownloadProgressBar {
override public function initialize():void {
super.initialize();
Singleton.registerClass("mx.resources::IResourceManager",
MyResourceManager);
}
}
이제 응용 프로그램에 사용자 정의 프리 로더를 할당하고 우리는 완료 : 추가 정보에 대한
<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" >
나는 다른에 대해 쓴 상당히 유사하지만 좀 더 정교한 대답에 당신을 참조 질문 : 그냥 레코드에 대한 Is there a way to listen for events on the pop up manager class?
와우, 나는 그런 상세한 대답을 기대하지 않았다! 정말로 당신의 도움에 감사드립니다. 나는 곧바로 그것을 얻을 것이다.앱의 사전 단계에서 현재하고있는 다른 로딩 요소들에 대해'RegisteringPreloader' 클래스를 사용할 수 있습니다. 다시 한 번 감사드립니다! – AlBirdie
좋아, 약간의 조정이 끝난 후 (나는 당신의 코드를 편집하여 자유롭게 편집 주석을 볼 수 있기를 희망했다.), 나는 ResourceManager의 실제 구현에 매달려있다. 내 getStringArrayBySeparator 함수를 호출하려고하면 오류 1061 (정의되지 않은 메서드)이 발생합니다. 변수 선언은 다음과 같습니다 :'var _resourceMan : IResourceManager = MyResourceManager.getInstance();'그리고 물론'_resourceMan.getStringArrayBySeparator '의 호출. – AlBirdie
사실, 메서드가 IResourceManager 인터페이스에 의해 정의되지 않았기 때문에 내 자신의 메서드를 추가 할 수 없다는 것을 알았습니다. 그러므로 찾을 수 없습니다. 동일한 이유로 인해 다른 변수를 추가하지 않으면 내 자신만으로 getStringArray 메소드를 대체하는 것이 가능하다고 가정합니다. 그것은 좋은 기능이지만, 간단한 오버 라이드로 할 수 있고 단지 쉼표를 세미콜론으로 바꿀 수 있습니다. – AlBirdie