2015-11-08 3 views
2

Мне удалось получить мои мозаичные карты, используя API-интерфейс ArcGIS javascript. Тем не менее, я хочу иметь возможность переключать слои (показывающие разные годы). Я создал функцию, которая будет делать это:ArcGIS API - функция вызова onClick()

require(["esri/map", 
    "esri/layers/ArcGISTiledMapServiceLayer", 
    "esri/geometry/Point", 
    "esri/SpatialReference", 
    "dojo/domReady!"], 
    function (Map, Tiled, Point, SpatRef) { 

... 

     function veranderTiled(jaar){ 
      map_Thema_2.removeAllLayers(); 
      tiled = new Tiled(
      "http://tiles.arcgis.com/tiles/nSZVuSZjHpEZZbRo/arcgis/rest/services/Historische_tijdreis_"+jaar+"/MapServer"); 
      map_Thema_2.addLayer(tiled); 
     } 

     ... 

    }); 

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

<input name="" type="button" onClick="veranderTiled(2015)" value="Ander jaar" /> 

Сама функция работает нормально, но я не могу назвать его из любого места за пределами требует (...) части. Я не уверен, как javascript обрабатывает такую ​​доступность (в основном используется для C++), но я задаюсь вопросом, что я должен изменить, чтобы иметь возможность вызвать эту функцию извне этого конкретного сценария.

Редактировать: как и ожидалось, консоль возвращает, что функция не определена. Есть ли способ указать его в нужное место (что-то вроде map.veranderTiled (2015)?)

ответ

2

Это проблема области - как вы предполагали, функция определена только в рамках обратного вызова require.

Обычно существует 2 способа решения этой проблемы.

Первый заключается в том, чтобы дать кнопке идентификатор и назначить ему обработчик события в требуемом обратном вызове (при условии, что либо ваши скрипты находятся в конце body, либо у вас есть dojo/domReady!, чтобы дождаться загрузки тела в первую очередь):

require(..., function (...) { 
    ... 

    document.getElementById('veranderTiledButton').onclick = function() { 
     veranderTiled(2015); 
    }; 
}); 

(Вы также можете использовать dojo/on подключить событие, хотя это не имеет решающего значения в этом случае.)

Второй способ это сделать функцию доступной во всем мире, которые, как правило, не рекомендуется, так как глобальная переменная область быстро становится диким западом, если ваш код делает является спонтанным:

var veranderTiled; // Declare outside to be globally available 

require(..., function (...) { 
    ... 

    // Define inside to be able to use loaded modules 
    veranderTiled = function (jaar) { 
     ... 
    }; 

    ... 
});