Widget 1private function widgetCommunication1():void { addSharedData("your key", shared data(ArrayCollection)); }
Widget 2<viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:viewer="com.esri.viewer.*" initialize="basewidget1_initializeHandler(event)" > <fx:Script> <![CDATA[ import com.esri.viewer.AppEvent; import mx.events.FlexEvent; protected function basewidget1_initializeHandler(event:FlexEvent):void { ViewerContainer.addEventListener(AppEvent.DATA_PUBLISH, sharedDataUpdated); } private function sharedDataUpdated(event:AppEvent):void { var data:Object = event.data; if (data.key == "my key") { // do something.. } } ]]> </fx:Script>
Hope that helps.
Bob,
You have to know your widgets Id number. The widgets id is not a string it is a sequential number that is assigned when the widget is created in FlexViewer.
Here is the code:ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, yourWidgetsID#));
I added a new function to the ViewerContainer.mxml for the purpose of finding a widgets id #//Add this new variable at the beginning with the other private and public vars public var _configData:ConfigData; //Add this new function public function getWidgetId(widgetLabel:String):Number { var id:Number; for (var i:Number = 0; i < _configData.widgets.length; i++) { if (_configData.widgets.label == widgetLabel) id = _configData.widgets.id; } return id; } //Add this to the postConfigHandler function _configData = event.data as ConfigData;
Then you can do something like thisViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, ViewerContainer.getWidgetId("Search")));
Bob,
You have to know your widgets Id number. The widgets id is not a string it is a sequential number that is assigned when the widget is created in FlexViewer.
Here is the code:ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, yourWidgetsID#));
I added a new function to the ViewerContainer.mxml for the purpose of finding a widgets id #//Add this new variable at the beginning with the other private and public vars public var _configData:ConfigData; //Add this new function public function getWidgetId(widgetLabel:String):Number { var id:Number; for (var i:Number = 0; i < _configData.widgets.length; i++) { if (_configData.widgets.label == widgetLabel) id = _configData.widgets.id; } return id; } //Add this to the postConfigHandler function _configData = event.data as ConfigData;
Then you can do something like thisViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, ViewerContainer.getWidgetId("Search")));
ViewerContainer.getInstance()
viewerCon:ViewerContainer = ViewerContainer.getInstace(); // inside init() ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, viewerCon.getWidgetId("Selection") ) ); AND ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, ViewerContainer.getInstance().getWidgetId("Selection") ) );
trace(viewerCon.getWidgetId("Selection"));or
Alert.show(viewerCon.getWidgetId("Selection"));