Flex- Singleton 的属性绑定到 HttpService 属性没有被更新
Posted
技术标签:
【中文标题】Flex- Singleton 的属性绑定到 HttpService 属性没有被更新【英文标题】:Flex- Singleton's properties Binded to HttpService properties are not being updated 【发布时间】:2013-11-23 20:12:59 【问题描述】:我有以下单例:
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 中更新吗?
感谢您的帮助。
塞巴斯蒂安
【问题讨论】:
【参考方案1】:internalConfiguration.ServerURL 没有被更新,因为 initialize() 方法从未被调用(至少在你提供的代码中)。 ServerURL 字段默认为空,因此它在 httpservice 中为空。考虑到 ServerURL 应该是可绑定的。 ServerURL 也应该有 setter,否则绑定不会被触发。
别忘了配置也必须是可绑定的:
[Bindable]
private var internalConfiguration:AppConfiguration = AppConfiguration.getInstance();
【讨论】:
感谢 Daniil 的 cmets。我没有提到它,但initialize()
方法正在CreationComplete
调用。在调用 getConfigurationHandler(event:Event)
并更新所有值后,我检查了这些值。另外,我将internalConfiguration
声明为[Bindable]
。我真的不明白这是为什么。如果您有更多想法,我将不胜感激。祝您度过愉快的一周!
就像我说的 ServerURL 应该有二传手。 ServerURL 的 getter 也应该是可绑定的。并且在初始化()方法调用 ServerURL 的设置器而不是私有字段 _serverURL 内部然后它将起作用。以上是关于Flex- Singleton 的属性绑定到 HttpService 属性没有被更新的主要内容,如果未能解决你的问题,请参考以下文章
Flex 警告:无法绑定到类“Object”上的属性“foo”(类不是 IEventDispatcher)
Flex:如何将 S:list 中的 Sqlist 查询绑定到 S:Textarea
无法绑定到“routerlink”,因为它不是使用 angular2-webpack-starter 的已知本机属性 [重复]