我试图为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);
}
答案 0 :(得分:1)
将item.ServiceName
替换为_MyLayers[i].ServiceName
可以有效。
当您定义loader
个功能时,并不意味着此时item.ServiceName
已分配给typename
。相反,该函数会保留一个指向item
变量(类型)的链接,然后链接回_MyLayers[i]
- 全局变量。
当OpenLayers为每个对象调用loader
函数时,'Test:' + item.ServiceName,
将被评估并分配给typename
,其中item
表示的值已经更改。它现在将指向最后一项(例如_MyLayers[3]
),因为它是分配的最后一个值item
。
通过替换上面的行,loader
函数现在每个都保持一个直接连接到全局_MyLayers
的唯一链接。由于i
是一个数字,每个加载器函数在i
循环中定义函数时基于for
的值实现一个语句(例如_MyLayers[1]
,{ {1}},......等等。)
答案 1 :(得分:0)
我最终将item.ServiceName
的值分配给sourceVector。然后在loader函数中读取sourceVector的值。