I tried to modify this example to disable the editing of geometry of existing features, but it doesn't work. Bug?
https://codepen.io/lkoumis1/pen/MWLZPyJ?editors=1000
const editor = new Editor({ view: view, // Pass in the configurations created above layerInfos: [{ layer:editConfigCrimeLayer, geometryUpdatesEnabled: false }, {layer:editConfigPoliceLayer, geometryUpdatesEnabled: false }],
Reference: https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html#layerInfos
No, the problem here is that those properties have been added in the wrong location. Instead, see lines 74, 88, and 125 below:
<html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" /> <title>Editor widget with configurations | Sample | ArcGIS Maps SDK for JavaScript 4.28</title> <link rel="stylesheet" href="https://js.arcgis.com/4.28/esri/themes/light/main.css" /> <script src="https://js.arcgis.com/4.28/"></script> <style> html, body, #viewDiv { padding: 0; margin: 0; height: 100%; width: 100%; } </style> <script> require(["esri/WebMap", "esri/views/MapView", "esri/widgets/Editor"], function ( WebMap, MapView, Editor ) { let editConfigCrimeLayer, editConfigPoliceLayer; // Create a map from the referenced webmap item id let webmap = new WebMap({ portalItem: { id: "154ba34201774bb29f7c3b68adf52b6a" } }); let view = new MapView({ container: "viewDiv", map: webmap }); view.when(() => { // Create a custom group to separate the different areas of crime. // This function takes a 'grouping' object which contains a feature template and a feature layer. function customGroup(grouping) { // If the layer is 'Police routes', do not group. let groupHeading = "Police Routes"; if (grouping.layer.title.toLowerCase() === "crime map") { switch (grouping.template.name) { case "Criminal Homicide": case "Rape": case "Robbery": case "Aggravated Assault": groupHeading = "Violent Crime"; break; case "Arson": case "Burglary": case "Larceny": case "Motor Vehicle Theft": groupHeading = "Property Crime"; break; default: groupHeading = "Quality of Life"; } } return groupHeading; } // Loop through the webmap's layers and set an edit configuration view.map.layers.forEach((layer) => { if (layer.title === "Police routes") { editConfigPoliceLayer = { layer: layer, geometryUpdatesEnabled: false, formTemplate: { //autocastable to FormTemplate // Set it so that only one field displays within the form elements: [{ // autocastable to FieldElement type: "field", fieldName: "PatrolType", label: "Patrol Type" }] } }; } else { // Specify a few of the fields to edit within the form editConfigCrimeLayer = { layer: layer, geometryUpdatesEnabled: false, formTemplate: { // autocastable to FormTemplate elements: [{ // autocastable to FieldElement type: "field", fieldName: "fulladdr", label: "Full Address" }, { type: "field", fieldName: "neighborhood", label: "Neighborhood" }, { type: "field", fieldName: "ucrdesc", label: "UCR Description" }, { type: "field", fieldName: "crimecategory", label: "Category" }, { type: "field", fieldName: "casestatus", label: "Status" } ] } }; } }); // Create the Editor const editor = new Editor({ view: view, // Pass in the configurations created above layerInfos: [editConfigCrimeLayer, editConfigPoliceLayer], // Override the default template behavior of the Editor widget supportingWidgetDefaults: { featureTemplates: { groupBy: customGroup } } }); // Add widget to the view view.ui.add(editor, "top-right"); }); }); </script> </head> <body> <div id="viewDiv"></div> <div id="editorDiv"></div> </body> </html>
THank you. It works. I thought it was a bug based on the ESRI's example. But actually the code posted is missing some commas and it breaks the code.
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.