Solved! Go to Solution.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Dynamic Layer</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" /> <script type="text/javascript">dojoConfig = { parseOnLoad: true };</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script> <style> html, body, #mapDiv, .map.container { padding:0; margin:0; height:100%; } </style> <script type="text/javascript"> dojo.require("esri.map"); dojo.require("esri.layers.FeatureLayer"); var map, featureLayer; function init() { esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); var initialExtent = new esri.geometry.Extent({ "xmin": -167.3, "ymin": -69.59, "xmax": 160.32, "ymax": 71.91, "spatialReference": { "wkid": 4326 } }); map = new esri.Map("mapDiv", { wrapAround180: true, extent: esri.geometry.geographicToWebMercator(initialExtent) }); dojo.connect(map, 'onLoad', initOperationalLayer); //Add the World Imagery service as a basemap to the map var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"); map.addLayer(basemap); } function initOperationalLayer(map) { var content = "<b>Name</b>: ${NAME}" + "<br /><b>Area</b>: ${ss6.gdb.Lakes.AREA:NumberFormat(places:0)}"; var infoTemplate = new esri.InfoTemplate("Dynamic Layer", content); //define the layer's data source from a table var dataSource = new esri.layers.TableDataSource(); dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; dataSource.dataSourceName = "ss6.gdb.Lakes"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = dataSource; //create a new feature layer based on the table data source featureLayer = new esri.layers.FeatureLayer('http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/dynamicLayer', { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"], infoTemplate: infoTemplate, source: layerSource }); dojo.connect(featureLayer, "onLoad", function (layer) { //project the extent if the map's spatial reference is different that the layer's extent. var gs = esri.config.defaults.geometryService; var extent = layer.fullExtent; if (extent.spatialReference.wkid === map.spatialReference.wkid) { map.setExtent(extent); } else { gs.project([extent], map.spatialReference).then(function (results) { map.setExtent(results[0]); }); } }); var renderer = new esri.renderer.SimpleRenderer( new esri.symbol.SimpleFillSymbol("solid", null, new dojo.Color([255, 0, 255, 0.75]) // fuschia lakes! )); featureLayer.setRenderer(renderer); map.addLayer(featureLayer); map.infoWindow.resize(150, 105); dojo.connect(window, 'resize', map, map.resize); } dojo.addOnLoad(init); function removeFeatureLayer() { map.removeLayer(featureLayer); } function removeFeatureLayer2() { console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length); for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) { var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds); //console.log("Graphics Layer ID: " + currentGraphicsLayer.id); map.removeLayer(currentGraphicsLayer); } } </script> </head> <body class='claro'> <div id="mapDiv"></div> <input type="button" value="Remove Feature Layer" style="position:absolute;bottom:40px;left:10px;" onclick="removeFeatureLayer()" /> <input type="button" value="Remove Feature Layer 2" style="position:absolute;bottom:10px;left:10px;" onclick="removeFeatureLayer2()" /> </body> </html> function createFL(layerid) {
hvaFeatureLayer = new esri.layers.FeatureLayer("<mapserver url>/" + layerid, {
mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
outFields: ["*"]
});
hvaFeatureLayer.setRenderer(getRenderer("Stoplight")); //custom green, yellow, red indicators
AddLayersToMap();
}function AddLayersToMap() {
//if current graphics layer exists, call graphics layer function to get layer and remove it
if (map.graphicsLayerIds.length >= 1) {
getMapGraphicsLayers();
}
map.addLayer(hvaFeatureLayer);
dojo.connect(hvaFeatureLayer, "onUpdateStart", function () {
hvaFeatureLayer.id = hvaFeatureLayer.name;
});
//event listener for when user clicks on map
dojo.connect(map, "onClick", executeSelectQueryTask);
dojo.connect(hvaFeatureLayer, "onMouseOver", function (evt) {
var t = "${LPHA_TRIBE_NAME}";
var content = esri.substitute(evt.graphic.attributes, t);
dialog.setContent(content);
dojo.style(dialog.domNode, "opacity", 1);
dijit.popup.open({ popup: dialog, x: evt.pageX, y: evt.pageY });
});
//close the dialog when the mouse leaves the highlight graphic
dojo.connect(map, "onLoad", function () {
map.graphics.enableMouseEvents();
dojo.connect(map.graphics, "onMouseOut", closeDialog);
});
}function getMapGraphicsLayers() {
console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length);
for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) {
var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds);
//console.log("Graphics Layer ID: " + currentGraphicsLayer.id);
map.removeLayer(currentGraphicsLayer);
}
} function changeHaz(value) {
//if (hvaFeatureLayer){
// map.removeLayer(hvaFeatureLayer);
//}
//alert(value.substring(0,value.length-1));
layerid = getIdFromMapService($.trim(value));
createFL(layerid);
}<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Dynamic Layer</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" /> <script type="text/javascript">dojoConfig = { parseOnLoad: true };</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script> <style> html, body, #mapDiv, .map.container { padding:0; margin:0; height:100%; } </style> <script type="text/javascript"> dojo.require("esri.map"); dojo.require("esri.layers.FeatureLayer"); var map, featureLayer; function init() { esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); var initialExtent = new esri.geometry.Extent({ "xmin": -167.3, "ymin": -69.59, "xmax": 160.32, "ymax": 71.91, "spatialReference": { "wkid": 4326 } }); map = new esri.Map("mapDiv", { wrapAround180: true, extent: esri.geometry.geographicToWebMercator(initialExtent) }); dojo.connect(map, 'onLoad', initOperationalLayer); //Add the World Imagery service as a basemap to the map var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"); map.addLayer(basemap); } function initOperationalLayer(map) { var content = "<b>Name</b>: ${NAME}" + "<br /><b>Area</b>: ${ss6.gdb.Lakes.AREA:NumberFormat(places:0)}"; var infoTemplate = new esri.InfoTemplate("Dynamic Layer", content); //define the layer's data source from a table var dataSource = new esri.layers.TableDataSource(); dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; dataSource.dataSourceName = "ss6.gdb.Lakes"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = dataSource; //create a new feature layer based on the table data source featureLayer = new esri.layers.FeatureLayer('http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/dynamicLayer', { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"], infoTemplate: infoTemplate, source: layerSource }); dojo.connect(featureLayer, "onLoad", function (layer) { //project the extent if the map's spatial reference is different that the layer's extent. var gs = esri.config.defaults.geometryService; var extent = layer.fullExtent; if (extent.spatialReference.wkid === map.spatialReference.wkid) { map.setExtent(extent); } else { gs.project([extent], map.spatialReference).then(function (results) { map.setExtent(results[0]); }); } }); var renderer = new esri.renderer.SimpleRenderer( new esri.symbol.SimpleFillSymbol("solid", null, new dojo.Color([255, 0, 255, 0.75]) // fuschia lakes! )); featureLayer.setRenderer(renderer); map.addLayer(featureLayer); map.infoWindow.resize(150, 105); dojo.connect(window, 'resize', map, map.resize); } dojo.addOnLoad(init); function removeFeatureLayer() { map.removeLayer(featureLayer); } function removeFeatureLayer2() { console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length); for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) { var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds); //console.log("Graphics Layer ID: " + currentGraphicsLayer.id); map.removeLayer(currentGraphicsLayer); } } </script> </head> <body class='claro'> <div id="mapDiv"></div> <input type="button" value="Remove Feature Layer" style="position:absolute;bottom:40px;left:10px;" onclick="removeFeatureLayer()" /> <input type="button" value="Remove Feature Layer 2" style="position:absolute;bottom:10px;left:10px;" onclick="removeFeatureLayer2()" /> </body> </html> Haven't had time to think this through fully though...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dynamic Layer</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css">
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" />
<script type="text/javascript">dojoConfig = { parseOnLoad: true };</script>
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script>
<style>
html, body, #mapDiv, .map.container {
padding:0;
margin:0;
height:100%;
}
</style>
<script type="text/javascript">
dojo.require("esri.map");
dojo.require("esri.layers.FeatureLayer");
var map, featureLayer;
function init() {
esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
var initialExtent = new esri.geometry.Extent({
"xmin": -167.3,
"ymin": -69.59,
"xmax": 160.32,
"ymax": 71.91,
"spatialReference": {
"wkid": 4326
}
});
map = new esri.Map("mapDiv", {
wrapAround180: true,
extent: esri.geometry.geographicToWebMercator(initialExtent)
});
dojo.connect(map, 'onLoad', initOperationalLayer);
//Add the World Imagery service as a basemap to the map
var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer");
map.addLayer(basemap);
}
function initOperationalLayer() {
var content = "<b>Name</b>: ${NAME}" + "<br /><b>Area</b>: ${ss6.gdb.Lakes.AREA:NumberFormat(places:0)}";
var infoTemplate = new esri.InfoTemplate("Dynamic Layer", content);
//define the layer's data source from a table
var dataSource = new esri.layers.TableDataSource();
dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2";
dataSource.dataSourceName = "ss6.gdb.Lakes";
var layerSource = new esri.layers.LayerDataSource();
layerSource.dataSource = dataSource;
//create a new feature layer based on the table data source
featureLayer = new esri.layers.FeatureLayer('http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/dynamicLayer', {
mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
outFields: ["*"],
infoTemplate: infoTemplate,
source: layerSource
});
dojo.connect(featureLayer, "onLoad", function (layer) {
//project the extent if the map's spatial reference is different that the layer's extent.
var gs = esri.config.defaults.geometryService;
var extent = layer.fullExtent;
if (extent.spatialReference.wkid === map.spatialReference.wkid) {
map.setExtent(extent);
} else {
gs.project([extent], map.spatialReference).then(function (results) {
map.setExtent(results[0]);
});
}
});
var renderer = new esri.renderer.SimpleRenderer(
new esri.symbol.SimpleFillSymbol("solid", null, new dojo.Color([255, 0, 255, 0.75]) // fuschia lakes!
));
featureLayer.setRenderer(renderer);
map.addLayer(featureLayer);
map.infoWindow.resize(150, 105);
dojo.connect(window, 'resize', map, map.resize);
}
dojo.addOnLoad(init);
function removeFeatureLayer() {
initOperationalLayer(); //Simulates the new layer call in your code
map.removeLayer(featureLayer);
}
function removeFeatureLayer2() {
initOperationalLayer(); //Simulates the new layer call in your code
console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length);
for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) {
var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds);
//console.log("Graphics Layer ID: " + currentGraphicsLayer.id);
map.removeLayer(currentGraphicsLayer);
}
}
</script>
</head>
<body class='claro'>
<div id="mapDiv"></div>
<input type="button" value="Remove Feature Layer" style="position:absolute;bottom:40px;left:10px;" onclick="removeFeatureLayer()" />
<input type="button" value="Remove Feature Layer 2" style="position:absolute;bottom:10px;left:10px;" onclick="removeFeatureLayer2()" />
</body>
</html>
I think you may have indirectly changed the referenced layer
// dojo.connect(hvaFeatureLayer, "onUpdateStart", function () {
// hvaFeatureLayer.id = hvaFeatureLayer.name;
// });