2016-05-26 9 views
0

Ich habe eine Tabelle mit Routen, die von FeatureTable generiert wurden, und ich habe setSelectionSymbol verwendet, um die in der Tabelle ausgewählte Route in rot zu ändern. Mein Problem ist, dass ich die Routenauswahl bestätigen möchte, nachdem die Route auf der Karte auf rot geändert wurde und mein Code eine Bestätigung verlangt, bevor die Route auf rot geändert wird. Mein Code istSo rufen Sie eine Funktion auf, nachdem der ausgewählte Eintrag in FeatureTable markiert ist

 var map, stateBaseMap, geometryLayer, routeFeature, routeDataFeature, myFeatureTable, 
     stateBaseMapUrl, geometryLayerUrl, routeFeatureUrl, routeDataFeatureUrl; 

    require([ "esri/map", 
      "esri/layers/ArcGISDynamicMapServiceLayer", 
      "esri/layers/ArcGISTiledMapServiceLayer", 
      "esri/tasks/GeometryService", 
      "esri/layers/FeatureLayer", 
      "esri/dijit/FeatureTable", 
      "esri/symbols/SimpleLineSymbol", 
      "esri/Color", 
      "dijit/layout/ContentPane", 
       "dijit/layout/BorderContainer", 
       "esri/geometry/Extent", 
       "esri/graphicsUtils", 
       "esri/tasks/query", 
       "dojo/dom", 
       "dojo/parser", 
       "dojo/ready", 
       "dojo/on"], 
    function(Map, 
      ArcGISDynamicMapServiceLayer, 
      ArcGISTiledMapServiceLayer, 
      GeometryService, 
      FeatureLayer, 
      FeatureTable, 
      SimpleLineSymbol, 
      Color, 
      ContentPane, 
      BorderContainer, 
      Extent, 
      graphicsUtils, 
      Query, 
       dom, 
       parser, 
       ready, 
       on) { 
     parser.parse(); 

     ready(function(){ 
      esri.config.defaults.io.proxyUrl = "/llr/llrproxy"; 
      esri.config.defaults.io.alwaysUseProxy = false; 
      esri.config.defaults.io.corsDetection = false; 
      stateBaseMapUrl = document.getElementById("shipment_stateBaseMapServiceURL").value; 
      geometryLayerUrl = document.getElementById("shipment_geometryServiceURL").value; 
      routeFeatureUrl = document.getElementById("shipment_routeLayerURL").value; 
      map = new Map("map"); 
      stateBaseMap = new ArcGISTiledMapServiceLayer(stateBaseMapUrl); 
      map.addLayer(stateBaseMap); 
      geometryLayer = new GeometryService(geometryLayerUrl); 
      map.addLayer(geometryLayer); 

      routeFeature = new FeatureLayer(routeFeatureUrl, { 
       mode : FeatureLayer.MODE_ONDEMAND, 
       outFields : [ "*" ], 
       visible:true, 
       id : "routeFeature" 
      }); 
      var selectionSymbol = new SimpleLineSymbol(
        SimpleLineSymbol.STYLE_SOLID, 
        new Color([255,0,0]), 
        4 
       ); 

      routeFeature.setSelectionSymbol(selectionSymbol); 

      map.addLayer(routeFeature); 
      on(routeFeature, "load", function(){ 
       loadTable(); 
       myFeatureTable.on("row-select", function(evt){ 
        confirmRoute(evt); 
        }); 
       }); 
      function confirmRoute(evt) { 
       var message = "Is this the correct route?\nEntry State: "+ 
           evt[0].data.ORIGIN + "\nRoute Description: " + 
           evt[0].data.ROUTE_DESC + "\nExit State: " + 
           evt[0].data.DESTNATION ; 
       if (confirm(message) == true) { 
        document.getElementById('shipment_routeText').value = evt[0].data.ROUTE_DESC; 
        var oldAction = document.getElementById("shipment").action; 
        var url = oldAction.replace("shipment","shipment"+"_saveRoute"); 
        document.forms[0].action = url; 
        document.forms[0].submit(); 

       } 
      } 

      function loadTable(){ 
        myFeatureTable = new FeatureTable({ 
        featureLayer : routeFeature, 
        map : map, 
        editable: false, 
        fieldInfos: [ 
           { 
           name: 'ROUTE_ID', 
           visible: false 
           }, 
           { 
           name: 'ORIGIN', 
           alias: 'Entry State' 
           }, 
           { 
           name: 'ROUTE_DESC', 
           alias: 'Route Description' 
           }, 
           { 
           name: 'DESTNATION', 
           alias: 'Exit State' 
           } 
        ] 
        }, 'myTableNode'); 

        myFeatureTable.startup(); 
      } 
     }); 
     }); 

Ich dachte, durch die confirmRoute(evt) Funktion innerhalb der myFeatureTable.on("row-select", function(evt){} Event-Handler setzen die Route zunächst hervorgehoben werden würde, aber es ist nicht. Ich benutze Version 3.16. Jede Hilfe wäre willkommen.

Antwort

0

Ich glaube, ich habe das Problem gelöst, indem ich einen update-end Event-Handler mit dem Handler row-select verschachtelt habe. Ich entferne auch den update-end Handler nach der Bestätigung. Ansonsten staple ich Bestätigungsfenster, wenn ich nicht auf Abbrechen klicke. Hier ist der Teil des Codes, den ich geändert habe.

   map.addLayer(routeFeature); 
      on(routeFeature, "load", function(){ 
       loadTable(); 
       myFeatureTable.on("row-select", function(evt){ 
        routeChange = routeFeature.on("update-end", function(none){ 
              confirmRoute(evt); 
             }); 
        }); 
       }); 
      function confirmRoute(evt) { 
       var message = "Is this the correct route?\nEntry State: "+ 
           evt[0].data.ORIGIN + "\nRoute Description: " + 
           evt[0].data.ROUTE_DESC + "\nExit State: " + 
           evt[0].data.DESTNATION ; 
       if (confirm(message) == true) { 
        document.getElementById('shipment_gisRouteId').value = evt[0].data.ROUTE_ID; 
        document.getElementById('shipment_routeText').value = evt[0].data.ROUTE_DESC; 
        var oldAction = document.getElementById("shipment").action; 
        var url = oldAction.replace("shipment","shipment"+"_saveRoute"); 
        document.forms[0].action = url; 
        document.forms[0].submit(); 
       } 
       routeChange.remove(); 
      }