Taking a closer look at this, graphic is a reference to a feature returned from a query task, meaning that it isn't actually in your graphics layer yet. You need to find the graphic in selectedGraphics.graphics with a particular ACCT value and pass that to selectedGraphics.remove(). I would use dojo.filter or maybe dojo.some with selectedGraphics.graphics to do this.
function showSelection(featureSet) { //remove all the selectedGraphics from the map, unless the CTRL key is pressed, leaving any drawnGraphics on the map if (!selectEvent.ctrlKey) { selectedGraphics.clear(); accounts = []; } //QueryTask returns a feature set. Loop through the featureset and add them to the map dojo.forEach(featureSet.features, function(feature){ var graphic = feature; //add the feature if it is not already in the collection if (accounts.indexOf(feature.attributes.ACCT) == -1) { accounts.push(feature.attributes.ACCT); graphic.setSymbol(symbol); //add the graphic to the selectedGraphics layer selectedGraphics.add(graphic); } else { accounts.splice(accounts.indexOf(feature.attributes.ACCT),1); //get the graphic that matches the feature var filteredGraphics = dojo.filter(selectedGraphics.graphics, function(item) { return item.attributes.ACCT == feature.attributes.ACCT; }) graphic = filteredGraphics[0]; selectedGraphics.remove(graphic); } }); }
Are you sure you're getting to selectGraphics.remove()? Try putting a console.log("removed graphic"); after selectGraphics.remove(). I ask because I think you're using array.splice incorrectly. Check out the MDN doc for more info: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice
Can you post some code to reproduce what you're seeing? I'm guessing the argument you're passing to GraphicsLayer.remove() isn't a graphic. Here's a simple page that shows using GraphicsLayer.remove(): http://jsfiddle.net/RsbD2/
function showSelection(featureSet) { //remove all the selectedGraphics from the map, unless the CTRL key is pressed, leaving any drawnGraphics on the map if (!selectEvent.ctrlKey) { selectedGraphics.clear(); accounts = []; } //QueryTask returns a feature set. Loop through the featureset and add them to the map dojo.forEach(featureSet.features, function(feature){ var graphic = feature; //add the feature if it is not already in the collection if (accounts.indexOf(feature.attributes.ACCT) == -1) { accounts.push(feature.attributes.ACCT); graphic.setSymbol(symbol); //add the graphic to the selectedGraphics layer selectedGraphics.add(graphic); } else { accounts.splice(accounts.indexOf(feature.attributes.ACCT),1); selectedGraphics.remove(graphic); } }); }
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.