我试图弄清楚如何在require
之外(ArcGIS JS API使用Dojo)从渲染后的Map访问ArcGIS JS API。例如,这样我就可以在Map上添加(或删除)点,并执行其他操作。
我可以按如下方式创建Map:
require(["esri/config", "esri/Map", "esri/views/MapView", "esri/Graphic",
"esri/layers/GraphicsLayer"
], function(esriConfig, Map, MapView, Graphic, GraphicsLayer) {
esriConfig.apiKey = "";
const map = new Map({
basemap: "arcgis-topographic"
});
const view = new MapView({
map: map,
center: [-81, 41],
zoom: 9,
container: "viewDiv"
});
});
我可以用这个函数添加一个点:
function plotPoint(lat, long, props) {
const popupTemplate = {
title: "{Name}",
content: "{Description}"
}
const attributes = {
Name: props.name,
Description: props.desc
}
const graphicsLayer = new GraphicsLayer();
map.add(graphicsLayer);
const point = {
type: "point",
longitude: long,
latitude: lat
};
const simpleMarkerSymbol = {
type: "simple-marker",
color: [226, 119, 40],
outline: {
color: [255, 255, 255],
width: 1
}
};
const pointGraphic = new Graphic({
geometry: point,
symbol: simpleMarkerSymbol,
attributes: attributes,
popupTemplate: popupTemplate
});
graphicsLayer.add(pointGraphic);
}
但是plotPoint
需要在require
回调函数中,这样它才能访问引用的模块(如GraphicsLayer
)。我可以将它赋给全局window
对象,这样我就可以在require之外调用它,但这样我可能会遇到函数在定义之前被调用的问题。
我可能还需要从代码中的其他点执行其他操作,如删除点、添加特征层等。不幸的是,这些操作必须全部存在于某些遗留代码中,因此我无法重构整个应用程序。
是否有更好的模式可以访问require
之外的API?
1条答案
按热度按时间lawou6xi1#
如果我理解正确的话,我认为实现所需功能的最简单方法就是定义模块并将其包含在应用程序中。
基于代码一个简单示例如下所示,
图形管理器.js
主文件.js
您可以看到main.js是应用程序启动的地方,在那里或其他模块中设置了一些内容。例如,Map、图层、小部件等。然后,您可以在模块中创建其他代码,并根据需要使用import。
dojotoolkit - intro to modules