arcgis flexviewer所有的小部件类均继承自com.esri.viewer.BaseWidget基类,而BaseWidget又继承了com.esri.viewer.IBaseWidget接口。所有的小部件又由WidgetManager类进行管理。因此,要实现从Application向widget传值,需要经由WidgetManager完成。例如,用户登录时记录了用户名,在widget中需要对用户名进行验证,可通过下述步骤将用户名(字符串)传递到所有的继承了上述小部件基类的widget中。
1、修改IBaseWidget接口文件,增加下述函数定义:
function set userName(value:String):void; function get userName():String;
2、在基类BaseWidget中实现上述方法:
private var _username:String; [Bindable] public function get userName():String { return _username; } public function set userName(value:String):void { _username = value; }
3、按照上述方法,在WidgetManager中定义相关的变量和属性存取器,如下:
private var user_name:String; [Bindable] public function set userName(value:String):void { user_name = value; } [Bindable] public function get userName():String { return user_name; }
4、假设Application中(一般为主页)有一个名为userNameStr的字符串变量,在WidgetManager的MXML声明中做如下定义:
<viewer:widgetManager> <managers:WidgetManager id="widgetManager" userName="{userNameStr}"/> </viewer:widgetManager>
5、在WidgetManager类的createWidget函数中,在widget.map = map;语句之后添加下述代码:
widget.userName = this.userName;
6、测试。用户名为admin,在小部件中添加:
Alert.show("Widget: " + this.userName);
执行相关代码,可见到来自小部件的消息框:
DONE.