Solved! Go to Solution.
The big picture is that I want an attribute inspector field that draws from a feature layer called "reports", so people can easily associate the map feature they're adding with the report that it comes from. We'll be continuously adding to the reports dataset, so I can't have a domain with finite values. I couldn't find a way to create a domain in ArcMap that is formulated from a query, just domains where you have to hard code your possible options. So that's why I ended up creating a custom select dijit in my JavaScript.
I was able to resolve my issue with the deferred pattern. As was suggested earlier I want to control when my map layers are getting added to the map, so that the completion of my queries are prioritized before firing the editor init function. So in my init function for the map I created a new Deferred and the instruction to wait until it's resolved to add my map layersdeferred = new dojo.Deferred(); deferred.then(function(value){ console.log(value); map.addLayers([needPoints, needRoutes, needAreas]); });
Then, at the end of my query I resolved my deferred:deferred.resolve("success"); return deferred.promise;
This was a tricky one and I very much appreciate the help you gave!
var stewardship = new esri.layers.FeatureLayer("http://tfsgis-iisd01:6080/arcgis/rest/services/FeatureServiceStewAAreaAPoint/FeatureServer/0", { mode: FeatureLayer.MODE_SELECTION, id: 'stewardship', outFields: ['*'] }); var activityarea = new esri.layers.FeatureLayer("http://tfsgis-iisd01:6080/arcgis/rest/services/FeatureServiceStewAAreaAPoint/FeatureServer/1", { mode: FeatureLayer.MODE_SELECTION, id: 'activityarea', outFields: ['*'] }); deferred = new dojo.Deferred(); deferred.then(function(value){ console.log(value); activityValue = dijit.byId('Activity').get('displayedValue') if (activityValue == "Forest Stewardship Plan") { map.removeAllLayers; alert("TEST") map.addLayers([stewardship]); } if (activityValue == "Non Forest Stewardship Plan") { map.removeAllLayers; alert("TEST2") map.addLayers([activityarea]); } }); map.on("layer-remove", layerremove) function layerremove() { TemplatePicker.destroy() } // map.addLayers([activityarea]); function initEditor(evt) { var templateLayers = arrayUtils.map(evt.layers, function(result){ return result.layer; }); // TEST: Changed to stewardship instead of templateLayers var templatePicker = new TemplatePicker({ featureLayers: templateLayers, grouping: true, rows: "auto", columns: 3 }, "templateDiv"); templatePicker.startup(); var layers = arrayUtils.map(evt.layers, function(result) { var fieldInfos= arrayUtils.map(result.layer.fields,function(field){ if(field.name === 'RecipientLast'){ return {'fieldName': field.name,'label':'Rec Last Name'} } if(field.name === 'RecipientFirst'){ return {'fieldName': field.name,'label':'Rec First Name'} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'Phone'){ return {'fieldName': field.name,'label':'Phone', 'customField':myDijit} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'ZipCode'){ return {'fieldName': field.name,'label':'ZipCode', 'customField':myDijit2} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if (field.name == 'DateStart') { return {'fieldName': field.name,'label':'Start Date', 'customField': datedijit } } else{ return {'fieldName': field.name,'label':field.alias} } }); return { featureLayer: result.layer, 'fieldInfos':fieldInfos}; }); //add a default value for newly added features var settings = { map: map, templatePicker: templatePicker, layerInfos: layers, toolbarVisible: true, createOptions: { polylineDrawTools:[ Editor.CREATE_TOOL_FREEHAND_POLYLINE ], polygonDrawTools: [ Editor.CREATE_TOOL_FREEHAND_POLYGON, Editor.CREATE_TOOL_CIRCLE, Editor.CREATE_TOOL_TRIANGLE, Editor.CREATE_TOOL_RECTANGLE ] }, toolbarOptions: { reshapeVisible: true, mergeVisible: true, cutVisible: true } }; var params = {settings: settings}; var myEditor = new Editor(params,'editorDiv'); //define snapping options var symbol = new SimpleMarkerSymbol( SimpleMarkerSymbol.STYLE_CROSS, 15, new SimpleLineSymbol( SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.5]), 5 ), null ); map.enableSnapping({ snapPointSymbol: symbol, tolerance: 20, snapKey: keys.ALT }); }//end of init editor function dojo.connect(dijit.byId("Activity"), 'onChange', function(value){ deferred.resolve("success"); return deferred.promise; } });
dojo.connect(dijit.byId("Activity"), 'onChange', function(value){ //alert('ok ' + event); if (value in oc(officeactivitylist)) { map.on("layers-add-result", initEditor); var stewardship = new FeatureLayer("http://tfsgis-iisd01:6080/arcgis/rest/services/MyMapService2/FeatureServer/0",{ mode: FeatureLayer.MODE_ONDEMAND, outFields: ['*'] }); map.addLayers([stewardship]); function initEditor(evt) { var templateLayers = arrayUtils.map(evt.layers, function(result){ return result.layer; }); var templatePicker = new TemplatePicker({ featureLayers: templateLayers, grouping: true, rows: "auto", columns: 3 }, "templateDiv"); templatePicker.startup(); var layers = arrayUtils.map(evt.layers, function(result) { var fieldInfos= arrayUtils.map(result.layer.fields,function(field){ if(field.name === 'RecipientLast'){ return {'fieldName': field.name,'label':'Rec Last Name'} } if(field.name === 'RecipientFirst'){ return {'fieldName': field.name,'label':'Rec First Name'} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'Phone'){ return {'fieldName': field.name,'label':'Phone', 'customField':myDijit} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'ZipCode'){ return {'fieldName': field.name,'label':'ZipCode', 'customField':myDijit2} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if (field.name == 'DateStart') { return {'fieldName': field.name,'label':'Start Date', 'customField': datedijit } } else{ return {'fieldName': field.name,'label':field.alias} } }); return { featureLayer: result.layer, 'fieldInfos':fieldInfos}; }); var settings = { map: map, templatePicker: templatePicker, layerInfos: layers, toolbarVisible: true, createOptions: { polylineDrawTools:[ Editor.CREATE_TOOL_FREEHAND_POLYLINE ], polygonDrawTools: [ Editor.CREATE_TOOL_FREEHAND_POLYGON, Editor.CREATE_TOOL_CIRCLE, Editor.CREATE_TOOL_TRIANGLE, Editor.CREATE_TOOL_RECTANGLE ] }, toolbarOptions: { reshapeVisible: true, mergeVisible: true, cutVisible: true } }; var params = {settings: settings}; var myEditor = new Editor(params,'editorDiv'); //define snapping options var symbol = new SimpleMarkerSymbol( SimpleMarkerSymbol.STYLE_CROSS, 15, new SimpleLineSymbol( SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.5]), 5 ), null ); map.enableSnapping({ snapPointSymbol: symbol, tolerance: 20, snapKey: keys.ALT }); } } if (value in oc(communityactivitylist)) { alert("Community Activity") map.removeLayer(stewardship) myEditor.destroy() } if (value in oc(countyactivitylist)) { alert("County Activity") } if (value in oc(activityarealist)) { alert("Activity Area") } if (value in oc(activitypointlist)) { alert("Activity Point") } else if (value == "Forest Stewardship Plan") { alert("Stewardship") } });
if (value in oc(officeactivitylist)) { var contentHolder = "<div id='templateDiv'></div><div id='editorDiv'></div>"; dojo.place(contentHolder, "contentpane", "first"); map.on("layers-add-result", initEditor); map.addLayers([stewardship]); function initEditor(evt) { var templateLayers = arrayUtils.map(evt.layers, function(result){ return result.layer; }); var templatePicker = new TemplatePicker({ featureLayers: templateLayers, grouping: true, rows: "auto", columns: 3 }, "templateDiv"); templatePicker.startup(); var layers = arrayUtils.map(evt.layers, function(result) { var fieldInfos= arrayUtils.map(result.layer.fields,function(field){ if(field.name === 'RecipientLast'){ return {'fieldName': field.name,'label':'Rec Last Name'} } if(field.name === 'RecipientFirst'){ return {'fieldName': field.name,'label':'Rec First Name'} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'Phone'){ return {'fieldName': field.name,'label':'Phone', 'customField':myDijit} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'ZipCode'){ return {'fieldName': field.name,'label':'ZipCode', 'customField':myDijit2} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if (field.name == 'DateStart') { return {'fieldName': field.name,'label':'Start Date', 'customField': datedijit } } else{ return {'fieldName': field.name,'label':field.alias} } }); return { featureLayer: result.layer, 'fieldInfos':fieldInfos}; }); var settings = { map: map, templatePicker: templatePicker, layerInfos: layers, toolbarVisible: true, createOptions: { polylineDrawTools:[ Editor.CREATE_TOOL_FREEHAND_POLYLINE ], polygonDrawTools: [ Editor.CREATE_TOOL_FREEHAND_POLYGON, Editor.CREATE_TOOL_CIRCLE, Editor.CREATE_TOOL_TRIANGLE, Editor.CREATE_TOOL_RECTANGLE ] }, toolbarOptions: { reshapeVisible: true, mergeVisible: true, cutVisible: true } }; var params = {settings: settings}; var myEditor = new Editor(params,'editorDiv'); //define snapping options var symbol = new SimpleMarkerSymbol( SimpleMarkerSymbol.STYLE_CROSS, 15, new SimpleLineSymbol( SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.5]), 5 ), null ); map.enableSnapping({ snapPointSymbol: symbol, tolerance: 20, snapKey: keys.ALT }); myEditor.startup(); } } if (value in oc(communityactivitylist)) { map.removeLayer(stewardship) map.on("layers-add-result", initEditor2); map.addLayers([activityarea]); function initEditor2(evt) { var templateLayers = arrayUtils.map(evt.layers, function(result){ return result.layer; }); var templatePicker = new TemplatePicker({ featureLayers: templateLayers, grouping: true, rows: "auto", columns: 3 }, "templateDiv"); templatePicker.startup(); var layers = arrayUtils.map(evt.layers, function(result) { var fieldInfos= arrayUtils.map(result.layer.fields,function(field){ if(field.name === 'RecipientLast'){ return {'fieldName': field.name,'label':'Rec Last Name'} } if(field.name === 'RecipientFirst'){ return {'fieldName': field.name,'label':'Rec First Name'} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'Phone'){ return {'fieldName': field.name,'label':'Phone', 'customField':myDijit} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if(field.name === 'ZipCode'){ return {'fieldName': field.name,'label':'ZipCode', 'customField':myDijit2} // return {'fieldName': field.name,'label':'Rec First Name',stringFieldOption:esri.dijit.AttributeInspector.STRING_FIELD_OPTION_TEXTAREA } if (field.name == 'DateStart') { return {'fieldName': field.name,'label':'Start Date', 'customField': datedijit } } else{ return {'fieldName': field.name,'label':field.alias} } }); return { featureLayer: result.layer, 'fieldInfos':fieldInfos}; }); var settings2 = { map: map, templatePicker: templatePicker, layerInfos: layers, toolbarVisible: true, createOptions: { polylineDrawTools:[ Editor.CREATE_TOOL_FREEHAND_POLYLINE ], polygonDrawTools: [ Editor.CREATE_TOOL_FREEHAND_POLYGON, Editor.CREATE_TOOL_CIRCLE, Editor.CREATE_TOOL_TRIANGLE, Editor.CREATE_TOOL_RECTANGLE ] }, toolbarOptions: { reshapeVisible: true, mergeVisible: true, cutVisible: true } }; myEditor.destroy() var params2 = {settings: settings2}; var myEditor2 = new Editor(params2,'editorDiv'); //define snapping options var symbol = new SimpleMarkerSymbol( SimpleMarkerSymbol.STYLE_CROSS, 15, new SimpleLineSymbol( SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.5]), 5 ), null ); map.enableSnapping({ snapPointSymbol: symbol, tolerance: 20, snapKey: keys.ALT }); myEditor2.startup(); }
var params = {settings: settings}; var myEditor = new Editor(params,'editorDiv'); var func = dojo.hitch(myEditor, function(){ myEditor.destroy(); });
if (displayedvalue in oc(communityactivitylist)) { map.removeLayer(stewardship) dojo.destroy("templateDiv") dojo.destroy('editorDiv') map.destroy() var contentHolder = "<div id='templateDiv2'></div><div id='editorDiv2'></div>"; dojo.place(contentHolder, "contentpane", "first"); map = new Map("map", { basemap: "hybrid", sliderStyle: "large", center: [-98.57, 30.98], zoom: 6, slider: true }); map.addLayers([activityarea]); map.setExtent(map.extent); func()