У меня есть одноэлементный класс для глобального доступа к информации о конфигурации. Этот одноэлементный класс, называемый ConfigurationData, расширяет EventDispatcher. Вот класс (обратите внимание, что я оставил некоторые вещи, как объявления переменных, чтобы сохранить этот короткий):Flex/AS3 Проблема при прослушивании события, отправленного из класса Singleton
/**
* Dispatched when the config file has been loaded.
*/
[Event (name="configurationLoaded", type="flash.events.Event")]
/**
* Dispatched when the config file has been loaded.
*/
[Event (name="configurationLoadFailed", type="flash.events.Event")]
public class ConfigurationData extends EventDispatcher{
// Event name constants.
public static const CONFIGURATION_LOADED:String = "configurationLoaded";
public static const CONFIGURATION_LOAD_FAILED:String = "configurationLoadFailed";
// The singleton instance.
private static var singleton:ConfigurationData;
/**
* Don't call the constructor directly, use getInstance() instead.
*/
public function ConfigurationData(pvt:PrivateClass){
// init
}
/**
* Get the singleton ConfigurationData.
* @return The ConfigurationData instance.
*/
public static function getInstance():ConfigurationData{
if (!ConfigurationData.singleton) ConfigurationData.singleton = new ConfigurationData(new PrivateClass());
return ConfigurationData.singleton;
}
public function initialize():void{
var configureService:HTTPService = new HTTPService;
configureService.url = _config_base_url + _config_path;
configureService.addEventListener(FaultEvent.FAULT, onConfigureFault);
configureService.addEventListener(ResultEvent.RESULT, onConfigureResult);
configureService.send();
}
private function onConfigureResult(event:ResultEvent):void{
var i:int = 0;
for(i=0; i<event.result.carriers.carrier.length; i++){
_mobile_carriers.addItem({label:event.result.carriers.carrier[i].name, data:event.result.carriers.carrier[i].id});
}
dispatchEvent(new Event(CONFIGURATION_LOADED));
}
private function onConfigureFault(event:FaultEvent):void{
_mobile_carriers = _default_carriers as ArrayCollection;
dispatchEvent(new Event(CONFIGURATION_LOAD_FAILED));
}
}
// This class is used to ensure that the ConfigurationData constructor can't be called directly,
// getInstance() must be used instead.
class PrivateClass {
public function PrivateClass() {}
}
Тогда у меня есть компонент MXML, который прослушивает событие CONFIGURATION_LOADED:
ConfigurationData.getInstance().addEventListener(Event.CONFIGURATION_LOADED, onConfigurationLoaded);
Для некоторых причина вызывает следующую ошибку: 1119: Доступ к возможному неопределенному свойству CONFIGURATION_LOADED через ссылку со статическим типом класса.
Кто-нибудь знает, как исправить это, чтобы я мог прослушать событие?
Спасибо!
Awesome, спасибо! Я знал, что это проблема, но я не знал, как лучше ее решить. Кстати, может быть, вы могли бы взглянуть на мою другую проблему с Flex? http://stackoverflow.com/questions/825377/scroll-thumb-is-extending-beyond-scroll-track-in-flex-app – Tony