[英]Flex- Singleton's properties Binded to HttpService properties are not being updated
我有以下Singleton:
package singletons{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.net.SharedObject;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.registerClassAlias;
public class AppConfiguration extends EventDispatcher
{
public static const SUCCESSFULCONFIGURATION:String = "ConfigurationSuccessful";
public static const CONFIGURATIONERROR:String = "ConfigurationError";
private var _userID:Number;
private var _serverIP:String;
private var _serverPort:Number;
private var _serverURL:String;
private static var _instance:AppConfiguration;
public static function getInstance():AppConfiguration
{
if (_instance == null)
{
_instance = new AppConfiguration();
registerClassAlias( "singletons.AppConfiguration", AppConfiguration );
}
return _instance;
}
public function initialize():Boolean
{
var configFile:SharedObject = SharedObject.getLocal("InternalConfiguration");
if (configFile.data.internalConfiguration == null)
{
return false;
}
var localConf:AppConfiguration = AppConfiguration(configFile.data.internalConfiguration);
_userID = localConf.UserID;
_serverIP = localConf.ServerIP;
_serverPort = localConf.ServerPort;
_serverURL = "http://" + _serverIP + ":" + _serverPort;
return true;
}
public function setInternalConfiguration(userID:Number, serverIP:String, serverPort:Number):void
{
_userID = userID;
_serverIP = serverIP;
_serverPort = serverPort;
_serverURL = "http://" + _serverIP + ":" + _serverPort;
var configurationRequest:URLRequest = new URLRequest(_serverURL + "/getHello?userID=" + _userID);
var requestLoader:URLLoader = new URLLoader();
requestLoader.addEventListener(Event.COMPLETE, getConfigurationHandler);
requestLoader.addEventListener(IOErrorEvent.IO_ERROR, getConfigurationErrorHandler);
requestLoader.load(configurationRequest);
}
private function getConfigurationHandler(event:Event):void
{
// 1.2.- Asignar los valores de las variables obtenidas a las variables locales
var configFile:SharedObject = SharedObject.getLocal("InternalConfiguration");
configFile.data.internalConfiguration = this as AppConfiguration;
configFile.flush();
var successEvent:Event = new Event(SUCCESSFULCONFIGURATION);
dispatchEvent(successEvent);
}
private function getConfigurationErrorHandler(event:IOErrorEvent):void
{
var failedEvent:Event = new Event(CONFIGURATIONERROR);
dispatchEvent(failedEvent);
}
public function get UserID():Number
{
return _userID;
}
public function get ServerIP():String
{
return _serverIP;
}
public function get ServerPort():Number
{
return _serverPort;
}
public function get ServerURL():String
{
return _serverURL;
}
}
}
當我嘗試將兩個單例的屬性ServerURL和UserID綁定到我的HTTPService的屬性URL和Request中時,修改后的值不會在HTTPService中更新。 進行綁定的代碼如下:
<fx:Declarations>
<s:HTTPService id="getStatusService"
url="{internalConfiguration.ServerURL}/getObject"
result="getStatusHandler(event)" fault="getStatusErrorHandler(event)">
<s:request>
<codec>{internalConfiguration.CodecID}</codec>
</s:request>
</s:HTTPService>
</fx:Declarations>
而當我執行getStatusService.send()時,它將轉到“ null / getObject”。
有人知道為什么HTTPService內的變量沒有更新嗎?
謝謝您的幫助。
塞巴斯蒂安
由於不會調用initialize()方法(至少在您提供的代碼中不會),因此不會更新internalConfiguration.ServerURL。ServerURL字段默認為空,因此這就是為什么在httpservice中它為null的原因。 考慮到ServerURL應該是可綁定的。 另外ServerURL應該具有setter,否則將不會觸發綁定。
並且不要忘記config必須是可綁定的:
[Bindable]
private var internalConfiguration:AppConfiguration = AppConfiguration.getInstance();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.