2016-05-26 3 views
0

У меня есть таблица маршрутов, сгенерированная FeatureTable, и я использовал setSelectionSymbol, чтобы изменить маршрут, выбранный в таблице, на красный. Моя проблема заключается в том, что я хочу подтвердить выбор маршрута после того, как маршрут на карте изменен на красный, и мой код запрашивает подтверждение до того, как маршрут будет изменен на красный. Мой кодКак вызывать функцию после выделения выделенного элемента в FeatureTable

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

Я думал, помещая функцию confirmRoute(evt) внутри обработчика событий myFeatureTable.on("row-select", function(evt){} маршрут будет выделен первым, но это не так. Я использую версию 3.16. Любая помощь будет оценена по достоинству.

ответ

0

Я думаю, что я решил проблему, вложив обработчик события update-end с помощью обработчика row-select. После подтверждения я также удаляю обработчик update-end. В противном случае я складываю окна подтверждения, если я не нажимаю кнопку «Отмена». Вот часть кода, который я изменил.

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