本例子是通過widgetA的按鈕打開widgetB,並把widgetA的某個值傳值到widgetB中,代碼如下:
widgetA中的代碼:
- <?xml version="1.0" encoding="utf-8"?>
- <viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- xmlns:viewer="com.esri.viewer.*"
- widgetConfigLoaded="init()">
- <fx:Script>
- <![CDATA[
- import com.esri.viewer.AppEvent;
- import com.esri.viewer.BaseWidget;
- import com.esri.viewer.IBaseWidget;
- import com.esri.viewer.ViewerContainer;
- import mx.collections.ArrayCollection;
- import mx.controls.Alert;
- import mx.events.FlexEvent;
- private function init():void
- {
- }
- var i:int=1;
- protected function button1_clickHandler(event:MouseEvent):void
- {
- var msArr:ArrayCollection = new ArrayCollection();
- msArr.addItem("第"+i.toString()+"次傳值");
- addSharedData("test", msArr);
- var id:Number = ViewerContainer.getInstance().widgetManager.getWidgetId("widgetB");
- var bWidget :IBaseWidget = ViewerContainer.getInstance().widgetManager.getWidget(id, true) as IBaseWidget;//打開widgetB
- i++;
- }
- ]]>
- </fx:Script>
- <viewer:WidgetTemplate id="aa"
- width="300" height="300">
- <viewer:layout>
- <s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
- </viewer:layout>
- <s:Button label="測試" click="button1_clickHandler(event)"/>
- </viewer:WidgetTemplate>
- </viewer:BaseWidget>
widgetB中代碼:
- <?xml version="1.0" encoding="utf-8"?>
- <viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- xmlns:viewer="com.esri.viewer.*"
- initialize="myBaseWidgetInitHandler(event)">
- <fx:Script>
- <![CDATA[
- import com.esri.viewer.AppEvent;
- import com.esri.viewer.IBaseWidget;
- import com.esri.viewer.ViewerContainer;
- import mx.collections.ArrayCollection;
- import mx.controls.Alert;
- import mx.events.FlexEvent;
- import com.esri.viewer.utils.Hashtable;
- protected function myBaseWidgetInitHandler(event:FlexEvent):void
- {
- AppEvent.addListener(AppEvent.DATA_SENT, sharedDataUpdatedFrist);//widgetA第一次點擊觸發
- AppEvent.addListener(AppEvent.DATA_PUBLISH, sharedDataUpdatedSecond);//widgetA第二次點擊後觸發
- fetchSharedData();
- }
- /***widgetA第一次點擊觸發的事件***/
- private function sharedDataUpdatedFrist(event:AppEvent):void
- {
- var dataTable:Hashtable = event.data as Hashtable;
- if (dataTable.containsKey("test"))
- {
- var recAC:ArrayCollection = dataTable.find("test") as ArrayCollection;
- if (recAC[0]){
- lbl.text=recAC[0].toString();
- }
- }
- }
- /***widgetA第二次點擊後觸發的事件***/
- private function sharedDataUpdatedSecond(event:AppEvent):void
- {
- var data:Object = event.data;
- if (data.key == "test")
- {
- var obj:Object = data.collection[0];
- var arr:ArrayCollection = new ArrayCollection();
- arr.addItem(obj);
- var str:String=arr.getItemAt(0).toString();
- this.lbl.text=str;
- }
- }
- ]]>
- </fx:Script>
- <viewer:WidgetTemplate id="bb"
- width="300" height="300">
- <viewer:layout>
- <s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
- </viewer:layout>
- <s:Label id="lbl" text="標籤"/>
- </viewer:WidgetTemplate>
- </viewer:BaseWidget>
運行結果: