[英]Javascript assign value of variable inside anonymous function
我正在尝试为OpenLayers创建几层。 我遍历数组,并使用typename: 'Test:' + item.ServiceName
为每个值分配值。 问题是当OpenLayer调用该函数时,它将获取item.ServiceName的最后一个分配值,该值始终为“ Test_Layer_3”,因此不使用Test_Layer_1和Test_Layer_2。
如何更改它,以便将Test_Layer_1,Test_Layer_2,Test_Layer_3分配给typename?
var _MyLayers = [];
_MyLayers.push({ "Id": 0, "ServiceName": "Test_Layer_1" });
_MyLayers.push({ "Id": 1, "ServiceName": "Test_Layer_2" });
_MyLayers.push({ "Id": 2, "ServiceName": "Test_Layer_3" });
for (var i = 0; i < _MyLayers.length; i++)
{
var item = _MyLayers[i];
var sourceVector = new ol.source.Vector({
loader: function (extent)
{
$.ajax('http://localhost/geoserver/wfs', {
type: 'GET',
data: {
service: 'WFS',
version: '1.1.0',
request: 'GetFeature',
typename: 'Test:' + item.ServiceName,
srsname: 'EPSG:3857',
outputFormat: 'application/json',
bbox: extent.join(',') + ',EPSG:3857'
}
});
},
strategy: ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({})),
});
var layerVector = new ol.layer.Vector({
source: sourceVector,
minResolution: 0,
maxResolution: 2,
style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: "rgba(25, 163, 255, 1.5)", width: 1 }) })
});
_MapLayers.push(layerVector);
}
它应该通过用_MyLayers[i].ServiceName
替换item.ServiceName
来工作。
定义loader
功能时,并不表示item.ServiceName
会分配给typename
。 取而代之的是,该函数会维护一个指向您的item
变量(某种)的链接,该链接然后又链接回_MyLayers[i]
的值—全局值。
当OpenLayers为每个对象调用loader
函数时,将对'Test:' + item.ServiceName,
进行评估,并将其分配给typename
,其中item
表示的值此后已更改。 现在它将指向最后一个项目(例如_MyLayers[3]
),因为它是最后一个值item
。
通过替换上面的行, loader
函数现在每个都维护一个直接链接到全局_MyLayers
的唯一链接。 由于i
是数字,因此每个加载器函数都会在for
循环中定义该函数时基于i
的值(例如_MyLayers[1]
, _MyLayers[2]
等)实现一个语句。
我最终将item.ServiceName
的值分配给sourceVector。 然后读取loader函数中的sourceVector的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.