arcgis flexviewer中由Application向widget傳值

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.接口

相關文章
相關標籤/搜索