我正在Mate框架之上开发Flex应用程序。
在这个应用程序中,我使用Web服务来检索数据
由于此Web服务不是修复位置URL(取决于客户安装它的位置),我在配置文件中定义此URL。
当Flex应用程序启动时,它首先读取此配置文件,然后我想使用我发现的值初始化Web服务。
但目前,我不知道如何做到这一点。
这是我的 EventMap.mxml
<EventMap>
<services:Services id="services" />
<EventHandlers type="{FlexEvent.PREINITIALIZE}">
<HTTPServiceInvoker instance="{services.configService}">
<resultHandlers>
<MethodInvoker generator="{ConfigManager}" method="loadFromXml" arguments="{resultObject}" />
</resultHandlers>
<faultHandlers>
<InlineInvoker method="Alert.show" arguments="ERROR: Unable to load config.xml !" />
</faultHandlers>
</HTTPServiceInvoker>
在这部分中,ConfigManager解析配置文件并初始化一个名为webServiceWsdl的可绑定属性
这是我的 Services.mxml
<mx:Object>
<mx:Script>
<![CDATA[
[Bindable] public var webservice:String;
]]>
</mx:Script>
<mx:HTTPService id="configService" url="config.xml" useProxy="false" />
<mx:WebService id="dataService" wsdl="{webservice}" useProxy="false"/>
</mx:Object>
如何初始化此webservice属性?
答案 0 :(得分:0)
创建一个单例类来封装配置选项,并将单例实例上的属性绑定到服务定义中。我们这样做了很多。
[Bindable]
class Config
{
private static var instance:Config;
public static function getInstance ():Config {
if (!instance)
instance = new Config();
return instance;
}
public var WEBSERVICE:String = "default value";
}
在Services.mxml中:
<mx:WebService id="dataService" wsdl="{Config.getInstance().WEBSERVICE}" useProxy="false"/>
显然,当您从文件加载配置时,需要更新配置实例。
答案 1 :(得分:0)
我没有看到这与有问题的人有什么不同。一个是可绑定的String,另一个是Bindable对象。
我发现当(在上面的示例中)与Web服务的wsdl参数关联的可绑定字符串发生更改时,Web服务永远不会更新。
因此,如果字符串的值不正确,那么Web服务将会出错而无法找到wsdl,并且永远不会再尝试...即使字符串更改值。
普雷斯顿
答案 2 :(得分:0)
您可以使用:
WebService.loadWSDL(runtimeWsdl) ;
其中runtimeWsdl
是包含动态wsdl值的String类型变量。