private function createPopUp(url:String,layer:ArcGISDynamicMapServiceLayer,layerId:int):void var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, completeHandler); loader.load(new URLRequest(url+"/"+layerId+"?f=json")); function completeHandler(event:Event):void { var loader:URLLoader = URLLoader(event.target); var svc:Object = JSON.decode(loader.data); var popupFields:Array = []; var firstfield:String =null; for each(var field:Object in svc.fields) { if(field.name=="OBJECTID"||field.name=="Shape_Length"||field.name=="Shape_Area" || field.name=="Shape")continue; var popupFieldInfo:PopUpFieldInfo = new PopUpFieldInfo(); if(!firstfield)firstfield=field.name; popupFieldInfo.fieldName = field.name; popupFieldInfo.label = field.alias; popupFieldInfo.visible = true; popupFieldInfo.format = new PopUpFieldFormat(); popupFields.push(popupFieldInfo); } var popUpInfo:PopUpInfo = new PopUpInfo(); // Tell the pop-up info about the field name template popUpInfo.title = "{"+firstfield+"}"; popUpInfo.popUpFieldInfos = popupFields; // Create the class factory var popUpRenderer:ClassFactory = new ClassFactory(PopUpRenderer); // Set the "popUpInfo" key popUpRenderer.properties = { "popUpInfo": popUpInfo }; var layerInfoWindowRenderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer(); layerInfoWindowRenderer.layerId = Number(layerId); var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); infoWindowRenderer.properties = { popUpInfo: popUpInfo }; var arrLayerInfoWindowRenderer:Array = []; arrLayerInfoWindowRenderer.push(popUpRenderer); layer.layerInfoWindowRenderers=arrLayerInfoWindowRenderer; } }
Solved! Go to Solution.
// Listen for new layers map.addEventListener(MapEvent.LAYER_ADD, onLayerAdd); private function onLayerAdd(event:MapEvent):void { if (event.layer is FeatureLayer) { // Do FeatureLayer stuff } else if (event.layer is ArcGISDynamicMapServiceLayer) { // If it's not a basemap, listen for it to load var layer:ArcGISDynamicMapServiceLayer = event.layer as ArcGISDynamicMapServiceLayer; if (layer.name.indexOf(" BaseMap") == -1) layer.addEventListener(LayerEvent.LOAD, onLayerLoad); } } // Fetch the fields of all sub-layers private function onLayerLoad(event:LayerEvent):void { var layer:ArcGISDynamicMapServiceLayer = event.layer as ArcGISDynamicMapServiceLayer; layer.removeEventListener(LayerEvent.LOAD, onLayerLoad); layer.getAllDetails(new AsyncResponser(getAllDetailsResult, getAllDetailsFault, layer)); } // Build an InfoWindow for each sub-layer private function getAllDetailsResult(event:AllDetails, layer:ArcGISDynamicMapServiceLayer):void { var renderers:Array = []; for each (var layerDetails:LayerDetails in event.layerDetails) if (layerDetails.fields) { var renderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer(); var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(layerDetails.fields, layerDetails.name) }; renderer.infoWindowRenderer = infoWindowRenderer; renderer.layerId = layerDetails.id; renderers.push(renderer); } layer.infoWindowRenderers = renderers; } private function configurePopupInfo(fields:Array, title:String = null):PopUpInfo { var popUpInfo:PopUpInfo = new PopUpInfo(); if (title) popUpInfo.title = title; var popUpFieldInfos:Array = []; for each (var field:Field in fields) { var fieldInfo:PopUpFieldInfo = new PopUpFieldInfo(); fieldInfo.fieldName = field.name; fieldInfo.label = field.name; fieldInfo.visible = true; popUpFieldInfos.push(fieldInfo); } popUpInfo.popUpFieldInfos = popUpFieldInfos; return popUpInfo; }
// Listen for new layers map.addEventListener(MapEvent.LAYER_ADD, onLayerAdd); private function onLayerAdd(event:MapEvent):void { if (event.layer is FeatureLayer) { // Do FeatureLayer stuff } else if (event.layer is ArcGISDynamicMapServiceLayer) { // If it's not a basemap, listen for it to load var layer:ArcGISDynamicMapServiceLayer = event.layer as ArcGISDynamicMapServiceLayer; if (layer.name.indexOf(" BaseMap") == -1) layer.addEventListener(LayerEvent.LOAD, onLayerLoad); } } // Fetch the fields of all sub-layers private function onLayerLoad(event:LayerEvent):void { var layer:ArcGISDynamicMapServiceLayer = event.layer as ArcGISDynamicMapServiceLayer; layer.removeEventListener(LayerEvent.LOAD, onLayerLoad); layer.getAllDetails(new AsyncResponser(getAllDetailsResult, getAllDetailsFault, layer)); } // Build an InfoWindow for each sub-layer private function getAllDetailsResult(event:AllDetails, layer:ArcGISDynamicMapServiceLayer):void { var renderers:Array = []; for each (var layerDetails:LayerDetails in event.layerDetails) if (layerDetails.fields) { var renderer:LayerInfoWindowRenderer = new LayerInfoWindowRenderer(); var infoWindowRenderer:ClassFactory = new ClassFactory(PopUpRenderer); infoWindowRenderer.properties = { popUpInfo: configurePopUpInfo(layerDetails.fields, layerDetails.name) }; renderer.infoWindowRenderer = infoWindowRenderer; renderer.layerId = layerDetails.id; renderers.push(renderer); } layer.infoWindowRenderers = renderers; } private function configurePopupInfo(fields:Array, title:String = null):PopUpInfo { var popUpInfo:PopUpInfo = new PopUpInfo(); if (title) popUpInfo.title = title; var popUpFieldInfos:Array = []; for each (var field:Field in fields) { var fieldInfo:PopUpFieldInfo = new PopUpFieldInfo(); fieldInfo.fieldName = field.name; fieldInfo.label = field.name; fieldInfo.visible = true; popUpFieldInfos.push(fieldInfo); } popUpInfo.popUpFieldInfos = popUpFieldInfos; return popUpInfo; }