2016-08-21 2 views
1

Я разработал инструмент веб-ГИС, чтобы найти некоторые функции на карте, используя функцию поиска java-скрипта ArcGIS и показать атрибут в сетке, используя сетку, дополненную додзё. все работает отлично в первый раз. Я могу найти функции с использованием ключевых слов и показать атрибуты в сетке, но когда я снова использую инструмент поиска, я могу показать только функции на карте, и сетка не обновляется после первого использования. Как я могу обновить и показать новые значения в сетке? geonet имеет код, подобный моему коду. Я ищу в stackoverflow и нашел how-to-refresh-datagrid, но я не мог использовать решения.Как обновить datagrid, чтобы показать новые значения?

define([ 
 
    "esri/tasks/FindTask", 
 
    "esri/tasks/FindParameters", 
 
    "esri/symbols/SimpleLineSymbol", 
 
    "esri/symbols/SimpleFillSymbol", 
 
    "esri/Color", 
 

 
    "dgrid/Grid", 
 
    "dgrid/Selection", 
 
    'dojo/_base/declare', 
 
    "dojo/on", 
 
    "dojo/dom", 
 
    "dijit/registry", 
 
    "dojo/_base/array", 
 
    "dijit/form/Button", 
 
    "dojo/parser", 
 
    "esri/symbols/SimpleMarkerSymbol","dojo/data/ItemFileReadStore","dojox/grid/EnhancedGrid","dojo/data/ItemFileWriteStore", 
 
    "dojox/grid/enhanced/plugins/Pagination","dojox/grid/enhanced/plugins/Selector","dojox/grid/enhanced/plugins/Filter","dojox/grid/enhanced/plugins/exporter/CSVWriter","dojo/io/iframe", 
 
    "dojo/domReady!"],function (FindTask, FindParameters, SimpleLineSymbol, SimpleFillSymbol, Color, 
 
           Grid, Selection, declare, on, dom, registry, arrayUtils, Button, parser,SimpleMarkerSymbol,ItemFileReadStore,EnhancedGrid,ItemFileWriteStore) { 
 
     return{ 
 

 
      Find: function (map) { 
 

 
       var findTask, findParams; 
 

 
       var grid, store; 
 

 

 

 

 
       parser.parse(); 
 

 
       registry.byId("searchfind").on("click", doFind); 
 

 
       //Create Find Task using the URL of the map service to search 
 
       findTask = new FindTask("http://...:6080/arcgis/rest/services/layers2/MapServer/"); 
 

 
       map.on("load", function() { 
 
        //Create the find parameters 
 
        findParams = new FindParameters(); 
 
        findParams.returnGeometry = true; 
 
        findParams.layerIds = [0]; 
 
        findParams.searchFields = ["Name"]; 
 
        findParams.outSpatialReference = map.spatialReference; 
 
        console.log("find sr: ", findParams.outSpatialReference); 
 
       }); 
 

 
       function doFind() { 
 
        //Set the search text to the value in the box 
 
        var ownerNameBox = dom.byId("findName"); 
 
        findParams.searchText = dom.byId("findName").value; 
 
        findTask.execute(findParams, showResults); 
 
       } 
 
       function showFilterBar(){ 
 
        dijit.byId('grid').showFilterBar(true); 
 
       } 
 

 
       function showResults(results) { 
 

 
        //This function works with an array of FindResult that the task returns 
 
        map.graphics.clear(); 
 
        var symbol = new SimpleMarkerSymbol(); 
 
        symbol.setColor(new Color([0,255,255])); 
 

 
        //create array of attributes 
 
        var items = dojo.map(results, function (result) { 
 
         var graphic = result.feature; 
 
         graphic.setSymbol(symbol); 
 
         map.graphics.add(graphic); 
 
         return result.feature.attributes; 
 
        }); 
 
        var data = { 
 
         identifier: 'OBJECTID', 
 
         label:'OBJECID', 
 
         items: items 
 
        }; 
 

 

 

 
        
 
        store = new dojo.data.ItemFileReadStore({data: data}); 
 

 
        /*set up layout*/ 
 
        var layout = [[ 
 
         {'name': 'OBJECTID', 'field': 'OBJECTID', 'width':'9em',datatype:"number"}, 
 
         {'name': 'Name', 'field': 'Name','width':'16em',datatype:"string",autocomplete:true}, 
 
         {'name':'Address','field':'Address','width':'18em',datatype:"string",autocomplete:true} 
 

 
        ]]; 
 

 
        /*create a new grid:*/ 
 
        var grid = new dojox.grid.EnhancedGrid({ 
 

 
          id: 'grid', 
 
          store:store, 
 
          structure: layout, rowSelector: '1px', 
 
          plugins: { 
 
           // pagination: { 
 
           //  pageSizes: ["5", "10", "All"], 
 
           //  description: true, 
 
           //  sizeSwitch: false, 
 
           //  pageStepper: true, 
 
           //  gotoButton: true, 
 
           //  /*page step to be displayed*/ 
 
           //  maxPageStep: 3, 
 
           //  /*position of the pagination bar*/ 
 
           //  position: "bottom" 
 
           // }, 
 
           filter: { 
 
            // Show the closeFilterbarButton at the filter bar 
 
            closeFilterbarButton: true 
 
            // Set the maximum rule count to 5 
 
            // ruleCount: 5, 
 
            // Set the name of the items 
 
            // itemsName: "songs", 
 

 
           } 
 

 
          } 
 

 
          }, 
 

 
         document.createElement('div')); 
 

 
        /*append the new grid to the div*/ 
 

 
        dojo.byId("grid").appendChild(grid.domNode); 
 

 

 

 
        /*Call startup() to render the grid*/ 
 

 
        grid.startup(); 
 
        grid.setStore(store); 
 
        grid.refresh() 
 

 

 

 

 

 
       } 
 
       //Zoom to the parcel when the user clicks a row 
 

 

 

 

 
        //display the results in the grid 
 

 

 

 
        //Zoom back to the initial map extent 
 
        // map.centerAndZoom(center, zoom); 
 

 

 
       // //Zoom to the parcel when the user clicks a row 
 
       function onRowClickHandler(evt) { 
 
        var clickedTaxLotId = event.rows[0].data.BRTID; 
 
        var selectedTaxLot = arrayUtils.filter(map.graphics.graphics, function (graphic) { 
 
         return ((graphic.attributes) && graphic.attributes.BRTID === clickedTaxLotId); 
 
        }); 
 
        if (selectedTaxLot.length) { 
 
         map.setExtent(selectedTaxLot[0].geometry.getExtent(), true); 
 
        } 
 
       } 
 

 
      } 
 

 

 
     } 
 

 

 

 
    } 
 

 

 
)
<body class="claro" role="main"> 
 
<div id="appLayout" style="width:100%; height:100%;" > 
 
     </div> 
 
    <!--<div id="rightpane">--> 
 
    <!--</div>--> 
 
    <div id="center"> 
 
     <!--> 
 
some divs 
 
<!--> 
 
</div> 
 
      <div id="bottom" style="height: 330px" > 
 

 
    </button> 
 

 
     <div id="grid" style="height:98%;font-size: 14px" ></div> 
 
</div> 
 

 
</body>

ответ

0

Для изменения значения изменения в сетке, вам нужно будет изменить значение в магазине сетки в. Виджет сетки додзе обновит себя по мере необходимости, поскольку он напрямую понравится вашему магазину.

+0

Здесь приведен пример, показывающий, как обновить данные в виджетах сетки dojo: http://jsfiddle.net/v6xbtwfz/ – GibboK

+0

Я отлаживаю свой код с помощью хром-отладчика. значения магазинов верны. в первый раз код создает сетку, используя «var grid = new dojox.grid.EnhancedGrid». в других случаях магазины получают новые значения, но не могут воссоздать сетку, используя «var grid = new dojox.grid.EnhancedGrid». Я думаю, что я должен создать сетку один раз, но я не знаю, как создать сетку один раз и использовать ее повторно – wetland

+0

@wetland, пожалуйста, создайте jsfiddle с кодом минимума и зависимостями для воспроизведения вашей проблемы. Я могу попытаться исправить это для вас и дать вам решение. Сообщение – GibboK

Смежные вопросы