在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打开时的画面: