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.