//From the Edit widget:
editor.map = map;
//From the Data Extract widget:
map.addLayer(graphicsLayer);
...
gp.processSpatialReference = map.spatialReference;
gp.outSpatialReference = map.spatialReference;
<esri:Editor id="myEditor" geometryService="{new GeometryService('http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer')}" map="{map}" toolbarVisible="true"/>
Any widget that extends BaseWidget will have access to the main map as "map". See some examples below:
editor.featureLayers = featureLayers; // where featureLayers is a local (not global) variable
<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:esri="http://www.esri.com/2008/ags" xmlns:viewer="com.esri.viewer.*" initialize="init(event)" > <fx:Script> <![CDATA[ import com.esri.ags.FeatureSet; import com.esri.ags.Graphic; import com.esri.ags.events.FeatureLayerEvent; import com.esri.ags.events.MapEvent; import com.esri.ags.events.MapMouseEvent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.tasks.QueryTask; import com.esri.ags.tasks.supportClasses.Query; import com.esri.ags.utils.WebMercatorUtil; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.FlexEvent; import mx.rpc.AsyncResponder; import mx.rpc.events.ResultEvent; import com.esri.ags.Graphic; import com.esri.ags.events.AttributeInspectorEvent; import com.esri.ags.events.FeatureLayerEvent; import com.esri.ags.events.MapMouseEvent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.layers.supportClasses.FeatureEditResult; import com.esri.ags.layers.supportClasses.FeatureEditResults; import com.esri.ags.layers.supportClasses.Field; import mx.controls.Alert; import mx.rpc.AsyncResponder; import mx.rpc.Fault; import mx.rpc.events.FaultEvent; private function init(event:FlexEvent):void { myEditor.featureLayers=[points]; } ]]> </fx:Script> <fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @namespace esri "http://www.esri.com/2008/ags"; @namespace components "com.esri.ags.components.*"; components|InfoWindow { background-color : #FFFFFF; border-thickness : 2; } </fx:Style> <fx:Declarations> <esri:GeometryService id="myGeometryService" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"/> </fx:Declarations> <viewer:WidgetTemplate id="helloWorld" width="100%" height="100%" > <viewer:layout> <s:HorizontalLayout /> </viewer:layout> <esri:Editor id="myEditor" geometryService="{myGeometryService}" map="{map}" toolbarVisible="true"/> <esri:FeatureLayer id="points" mode="snapshot" outFields="*" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer/0"/> </viewer:WidgetTemplate> </viewer:BaseWidget>
I don't think you need to know the name/id/url of the feature layers. Look at the Edit widget:editor.featureLayers = featureLayers; // where featureLayers is a local (not global) variable
Depending on your use case, you wouldn't use all the feature layers, only the editable feature layers. Also, when a layer is turned on/off, your widget probably would want to know. The Edit Widget already takes care of many such scenarios.
Maybe take a step back and explain what you are trying to do in more details. I'm curious why the EditWidget, either as is, or modified, wouldn't be a better starting point than the HelloWorld widget...
Steven,
You can't add a FeatureLayer to the widgetTemplate it has to be added to the map object. You could do this using ActionScript but I have to echo Bjorn's question as to why are you attempting to do this on your own and not beginning with the editor widget...?
By default, each visible feature layer from the operational layers in the Viewer application is editable with the Edit widget. The widget will automatically know what types of features can be created/edited based on the layer's defined feature template. Feature layers can be made ineditable by specifying the layer name in the widget's <excludelayer> tag.
<viewer:WidgetTemplate width="300" height="300" closed="widgetClosedHandler(event)" minHeight="300" minWidth="300" minimized="widgetMinimizedHandler(event)" open="widgetOpenedHandler(event)"> <viewer:layout> <s:VerticalLayout paddingLeft="5" paddingTop="10"/> </viewer:layout> <s:Label text="{getDefaultString('selectTemplateText')}"/> <mx:Spacer/> <esri:Editor id="editor" width="100%" height="100%" geometryService="{geometryService}" toolbarVisible="true"/> </viewer:WidgetTemplate>
Steven,
Have you looked at the concepts-widgets-editorwidget page of the viewer here:
http://help.arcgis.com/en/webapps/flexviewer/help/widgets/edit_widget.htm