在Flex Viewer的设计中,每个Widget都可以有一个配置文件,来配置Widget所需要的各种资源,提倡的做法是配置文件名与Widget名称保持一致,并且位于同一目录下。当然,Widget的配置文件不是必须的,当不需要配置信息时,配置文件可省略。在《Flex Viewer解析》中,我们以HelloWorldWidget为例,说明如何在Flash Builder中实现自定义Widget。下面我们同样以HelloWorldWidget为例,来说明Widget如何从其配置文件获取资源信息。
先来看一下HelloWorldWidget.xml,也就是配置文件的内容:
<?xml version="1.0" ?>
<configuration>
<hellocontent>Hello, Flex Viewer!</hellocontent>
</configuration>
再来看一下HelloWorldWidget的实现代码,如下:
<?xml version="1.0" encoding="utf-8"?>
<viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:viewer="com.esri.viewer.*"
layout="absolute" width="400" height="300"
widgetConfigLoaded="init()">①
<fx:Script>
<![CDATA[
[Bindable]
private var helloContent:String;
private function init():void{②
if (configXML){③
helloContent=String(configXML.hellocontent);④
}
}
]]>
</fx:Script>
<viewer:WidgetTemplate>
<s:HGroup width="100%"
height="100%"
horizontalAlign="center"
verticalAlign="middle">
<s:Label text="{helloContent}"/>⑤
</s:HGroup>
</viewer:WidgetTemplate>
</viewer:BaseWidget>
① widgetConfigLoaded事件
widgetConfigLoaded事件是BaseWidget中设计的一个事件,用来说明Widget对应的配置文件已经成功读取。通常在这个事件的响应方法中解析XML数据,获取所需的资源信息。如果自定义Widget需要配置文件中的信息,如①所示,设置widgetConfigLoaded事件的响应方法即可。
② 响应方法
widgetConfigLoaded事件的响应方法,在该方法中对XML配置信息进行解析。
③ configXML对象
Widget配置文件是一个XML文档,configXML是在BaseWidget中定义的XML对象,用来表示配置文件的XML数据。通常,widgetConfigLoaded事件的响应方法中,直接访问configXML即可。
④ 解析配置信息
从configXML中获取所需资源信息,此处是ActionScript中对于XML数据的操作,可参考相关教程。
⑤ 使用配置信息
配置信息可以有多种使用方式,此处只是简单的把字符串信息显示出来。除此之外,配置信息可以是各种资源的url、对Timer设置的时间间隔等等。
在具体系统的开发过程中,应尽可能多的将Widget用到的资源放到配置文件中,这样的话,即便在系统交付之后,用户可以通过修改配置文件达到特定需求,而不需要更改源代码。下图是HelloWorldWidget打开时的画面: