【发布时间】:2015-11-03 15:46:08
【问题描述】:
我在 ESRI Web App Builder 中使用 dojo,遇到了一种情况,即我需要运行 AJAX 调用并仍然从基类访问变量。下面是我的代码,其中包含 cmets,以准确解释它在哪里成功以及在哪里失败:
define(['dojo/_base/declare', 'jimu/BaseWidget', 'dojo/request', "esri/layers/WMSLayer", "esri/config", "dojo/domReady!"], function (declare, BaseWidget, request, WMSLayer, esriConfig) {
return declare([BaseWidget], {
baseClass: 'jimu-widget-mywidget',
// This function is called by a button press (Normally the WMSLayer variable would be set by user input)
addWms: function () {
var wmsLayer = new WMSLayer("http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer", {
format: "png",
visibleLayers: [2]
});
this.map.addLayer(wmsLayer); // this.map is inherited from BaseWidget as far as I can see. This adds a wms to my map without error
request("request.html").then(function(data){
var wmsLayer = new WMSLayer("http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer", {
format: "png",
visibleLayers: [2]
});
this.map.addLayer(wmsLayer); // This is now in another context....I get the error HERE.
// At this point map is not defined because this anonymous function is running
// in a different context. ( at least I think that's what is happening )
}, function(err){
// Hopefully there are no typos in my example XD
});
}
});
});
我的问题是 --> 如何通过“request”的回调函数访问“map”变量?
我希望能够从我对 WMS 服务的 GetCapabilities 的调用中运行 this.map.addLayers。该请求通常会调用它,我一直到我的代码结束,直到我无法再访问“map”变量,因为我知道它。
Dojo 类型的答案是首选,但普通的旧 javaScript 也可以。请避免使用 JQuery 答案。
【问题讨论】:
标签: javascript dojo esri wms arcgis-js-api