<?xml version="1.0" encoding="utf-8"?> <s:Application 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:samples="com.*" pageTitle="Layers and Legends"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; protected function application1_initializeHandler(event:FlexEvent):void { myLegend.layers = [ myDynamicService ]; } ]]> </fx:Script> <s:layout> <s:VerticalLayout horizontalAlign="center" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20"/> </s:layout> <mx:HDividedBox width="100%" height="100%"> <esri:Map id="myMap"> <esri:ArcGISDynamicMapServiceLayer id="myDynamicService" name=" " load="myDynamicService.defaultVisibleLayers()" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Network/USA/MapServer"/> </esri:Map> <mx:VBox width="40%" height="100%"> <mx:Panel width="100%" height="50%" borderVisible="true" borderColor="#030303" title="Layers"> <samples:LayerTOC mapLayer="{myDynamicService}"/> </mx:Panel> <mx:Panel width="100%" height="50%" borderVisible="true" borderColor="#030303" title="Legend"> <esri:Legend id="myLegend" width="100%" height="100%" map="{myMap}" respectCurrentMapScale="true"/> </mx:Panel> </mx:VBox> </mx:HDividedBox> </s:Application>
TypeError: Error #1034: Type Coercion failed: cannot convert mx.collections::ArrayCollection@87e04c1 to com.esri.ags.layers.ArcGISDynamicMapServiceLayer. at com.esri.ags.skins::LegendSkin/visibleLayersChangeHandler()at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.collections::ListCollectionView/dispatchEvent() at mx.collections::ListCollectionView/removeItemsFromView() at mx.collections::ListCollectionView/listChangeHandler() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.collections::ArrayList/internalDispatchEvent() at mx.collections::ArrayList/removeItemAt() at mx.collections::ListCollectionView/removeItemAt() at com::LayerTOC/hideLayer() at com::LayerVizRenderer/cb_clickHandler() at com::LayerVizRenderer/__cb_click()
private function visibleLayersChangeHandler(event:CollectionEvent):void { const mapLayers:ArrayCollection = ArrayCollection(hostComponent.map.layers); for (var i:int = 0; i < mapLayers.length; ) { if (mapLayers.getItemAt(i) is ArcGISDynamicMapServiceLayer && ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i)).visible && ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i)).visibleLayers === event.target) { visibleLayersChanged(ArcGISDynamicMapServiceLayer(mapLayers.getItemAt(i))); break; } else { i++; } } }
<esri:Legend id="myLegend" width="100%" height="100%" map="{myMap}" respectCurrentMapScale="true" skinClass="MyLegendSkin"/>