arcgis flexviewer全部的小部件類均繼承自com.esri.viewer.BaseWidget基類,而BaseWidget又繼承了com.esri.viewer.IBaseWidget接口。全部的小部件又由WidgetManager類進行管理。所以,要實現從Application向widget傳值,須要經由WidgetManager完成。例如,用戶登陸時記錄了用戶名,在widget中須要對用戶名進行驗證,可經過下述步驟將用戶名(字符串)傳遞到全部的繼承了上述小部件基類的widget中。函數
一、修改IBaseWidget接口文件,增長下述函數定義:測試
function set userName(value:String):void; function get userName():String;
二、在基類BaseWidget中實現上述方法:flex
private var _username:String; [Bindable] public function get userName():String { return _username; } public function set userName(value:String):void { _username = value; }
三、按照上述方法,在WidgetManager中定義相關的變量和屬性存取器,以下:this
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; }
四、假設Application中(通常爲主頁)有一個名爲userNameStr的字符串變量,在WidgetManager的MXML聲明中作以下定義:spa
<viewer:widgetManager> <managers:WidgetManager id="widgetManager" userName="{userNameStr}"/> </viewer:widgetManager>
五、在WidgetManager類的createWidget函數中,在widget.map = map;語句以後添加下述代碼:code
widget.userName = this.userName;
六、測試。用戶名爲admin,在小部件中添加:blog
Alert.show("Widget: " + this.userName);
執行相關代碼,可見到來自小部件的消息框:繼承
DONE.接口