2016-05-26 1 views
0

J'ai une table de routes générée par FeatureTable et j'ai utilisé setSelectionSymbol pour changer l'itinéraire sélectionné dans le tableau en rouge. Mon problème est que je veux confirmer la sélection de l'itinéraire après que l'itinéraire sur la carte est passé en rouge et que mon code demande une confirmation avant que l'itinéraire ne devienne rouge. Mon code estComment appeler une fonction après que l'élément choisi dans FeatureTable est en surbrillance

 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(); 
      } 
     }); 
     }); 

je pensais en mettant la fonction confirmRoute(evt) à l'intérieur du gestionnaire d'événements myFeatureTable.on("row-select", function(evt){} la route serait d'abord mis en évidence, mais ce n'est pas. J'utilise la version 3.16. Toute aide serait appréciée.

Répondre

0

Je pense que j'ai résolu le problème en imbriquant un gestionnaire d'événements update-end avec le gestionnaire row-select. Je supprime également le gestionnaire update-end après la confirmation. Sinon, j'empile les fenêtres de confirmation si je ne clique pas sur annuler. Voici la partie du code que j'ai changé.

   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(); 
      }