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.
浙公網安備 33010602011771號