<viewer:BaseWidget ...>
...
private var myGraphicsLayer:GraphicsLayer;
/**
* Listen widget template open handler
*/
protected function openHandler(event:Event):void
{
myGraphicsLayer = getMyGraphicsLayer();
if (!myGraphicsLayer)
{
// show alert 'Graphics Layer is null'
trace("GraphicsLayer not found");
}
else
{
trace(StringUtil.substitute("GraphicsLayer with id={0} found", myGraphicsLayer.id));
}
}
/**
* Get existing graphics layer or add new if does not exists
*/
private function getMyGraphicsLayer():GraphicsLayer
{
var result:GraphicsLayer = null;
if (map)
{
var mapLayers:ArrayCollection = map.layers as ArrayCollection;
for each (var mapLayer:Layer in mapLayers)
{
if (mapLayer is GraphicsLayer)
{
result = mapLayer as GraphicsLayer;
map.addEventListener(MapMouseEvent.MAP_MOUSE_DOWN, onMapClick);
break;
}
}
// if map has not any graphics layer add new
if (!result)
{
result = new GraphicsLayer();
map.addLayer(result);
}
}
return result;
}
/**
* Listen map mouse down event handler
*/
protected function onMapClick(event:MapMouseEvent):void
{
if (myGraphicsLayer)
{
var grGeometry:MapPoint = event.mapPoint;
var sms:SimpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 10, 0xFF0000);
var attributes:Object = new Object();
attributes.dateadded = new Date();
var gr:Graphic = new Graphic(grGeometry, sms, attributes);
var grId:String = myGraphicsLayer.add(gr);
trace(StringUtil.substitute("Graphic with id: {0} added.", grId));
}
}
/**
* Listen widget template close handler
*/
private function closedHandler(event:Event):void
{
if (map)
{
map.removeEventListener(MapMouseEvent.MAP_MOUSE_DOWN, onMapClick);
}
}
....
<viewer:WidgetTemplate id="wTemplate"
width="300"
height="300"
closed="closedHandler(event)"
open="openHandler(event)">
<!-- Here are widget contents -->
</viewer:WidgetTemplate>
</viewer:BaseWidget>