In my application I can click on a point or add a point to a sign or support layer, but my support layer does not appear to apply the edits and my sign layer does not appear to apply edits or add graphics. I also have this project on github at: csergent45/streetSigns · GitHub and the file that I am working on is in app/main.js Any ideas on this Tom Wayson ? I see the edits in the console.log, but they don't apply right after that.
Here is my code for both layers:
// temporarily show alert when starting edits // and then start listening for a map click var startCaptureRequest = function (severity) { var listener; // NOTE: once user has clicked "x" to dismiss // this alert, it will no longer show up domStyle.set(app.startEditAlert, "display", ""); setTimeout(function () { domStyle.set(app.startEditAlert, "display", "none"); }, 3000); // save map point in app global and listener = app.map.on("click", function (e) { listener.remove(); // save map point in app global and // show form to collect incident report app.currentGeometry = e.mapPoint; /* Show signs form */ if (severity === "0") { document.getElementById("signForm").reset(); app.attributesSignModal.modal("show"); /* Enter your domain item and then the element to populate */ populateSelect("BACKING", "backing","sign"); populateSelect("VISIBILITY", "visibility","sign"); populateSelect("CONDITION_", "condition","sign"); populateSelect("COLOR1", "color1","sign"); populateSelect("DELINEATOR", "delineator","sign"); populateSelect("ILLUM", "illum","sign"); populateSelect("ATTACHTYPE", "attachType","sign"); populateSelect("ATTACHLOC", "attachLoc","sign"); populateSelect("SITEOBS", "siteObs","sign"); populateSelect("SIGNSHAPE", "signShape","sign"); populateSelect("COLOR2", "color2","sign"); populateSelect("MUTCD", "mutcd","sign"); /* Show supports form */ } else if (severity === "1") { document.getElementById("supportForm").reset(); app.attributesModal.modal("show"); /* Enter your domain item and then the element to populate */ populateSelect("TYPE", "type","support"); populateSelect("SIZE_", "size","support"); populateSelect("MATERIAL", "material","support"); populateSelect("BASE", "base","support"); populateSelect("RATING", "rating","support"); } }); }; var stopCaptureRequest = function () { app.currentGeometry = null; }; // get attributes from form and submit var submitSupports = function () { alert(domClass.contains("attributesModal", "in")); var attributes = { // TODO: not sure if this is needed //requestreceived: null }; var currentDate = new Date(); // current date is defined but never used. var graphic; graphic = new Graphic(app.currentGeometry); query("#attributesModal input, #attributesModal select, #attributesModal textarea").forEach(function (formInput) { attributes[formInput.name] = formInput.value; }); // Form Validation - ensures that the values for the database are here if left blank if ((attributes.supportId === undefined) || (attributes.supportId === "")) { attributes.supportId = null; } if ((attributes.dateInv === undefined) || (attributes.dateInv === "")) { attributes.dateInv = null; } if ((attributes.addrCode === undefined) || (attributes.addrCode === "")) { attributes.addrCode = null; } graphic.setAttributes(attributes); stopCaptureRequest(); //console.log(attributes); app.supportLayer.applyEdits([graphic], null, null).then(function (response) { console.log(response); }); }; // get sign attributes from form and submit var submitSigns = function () { alert(domClass.contains("attributesSignModal", "in")); var attributes = { // TODO: not sure if this is needed //requestreceived: null }; var currentDate = new Date(); // current date is defined but never used. var graphic; graphic = new Graphic(app.currentGeometry); query("#attributesSignModal input, #attributesSignModal select, #attributesSignModal textarea").forEach(function(formInput) { attributes[formInput.name] = formInput.value; }); // Form validation - ensures that the values for the data are here if left blank if ((attributes.installed === undefined)|| (attributes.installed === "")) { attributes.installed = null; } if ((attributes.signId === undefined) || (attributes.signId === "")) { attributes.signId = null; } if ((attributes.supportId === undefined) || (attributes.supportId === "")) { attributes.supportId = null; } graphic.setAttributes(attributes); stopCaptureRequest(); //console.log(attributes); app.signLayer.applyEdits([graphic], null, null).then(function (response) { console.log(response); }); };
Solved! Go to Solution.
Try calling refresh() on the layers at the same lines where you call the console.log() statements above.
I once had this issue because I had a definition query on the layer I was editing, so although the edits were added they were not drawn in the map...thought it worth mentioning.
When I tagged you, I had an incident with support and originally was having a difficult time with it. They have told me since, that my code is refreshing the page on submit; not sure why. If I have a solution I will post it later. I just don't know what might cause a page to refresh without that code in JavaScript.
I realized one other thing, in the function:
I had to modify some code for the order of my data being entered but that worked. Thanks!