[英]OpenLayers: can't i get features of VectorSource outside of event listener?
我試圖只顯示我的Vector Source中的某個特征。 所以我做了這樣的功能:
function showUtility(id) {
utilitiesSource.forEach(function(i) {
//console.log(i.getFeatures());
i.forEachFeature(function(f) {
if (f.getProperties().id == id) {
f.setStyle(null);
} else {
f.setStyle([]);
}
});
});
}
utilitiesSource來自哪里:
utilitiesSource = [];
var utilitySource = new ol.source.Vector({
format: new ol.format.GeoJSON(),
projection: 'EPSG:4326',
url: 'someUrl',
extractStyles: false
});
utilitiesSource.push(utilitySource);
問題 console.log(i.getFeatures())
在showUtility()
總是給空數組雖然很好,如果我是這樣的一個事件偵聽使用它:
var selectCtrl = new ol.control.Select({
source: utilitiesSource,
property: $(".options select").val(),
selectLabel: 'Cari',
addLabel: 'Tambah Kondisi',
allLabel: 'Cocokkan Semua',
attrPlaceHolder: 'atribut',
valuePlaceHolder: 'nilai'
});
selectCtrl.on('select', function(e) {
select.getFeatures().clear();
utilitiesSource.forEach(function(i) {
//console.log(i.getFeatures()); --> gives array of feature
i.forEachFeature(function(f) {
f.setStyle([]);
});
})
e.features.forEach(function(f) {
f.setStyle(null);
});
});
var bar = new ol.control.Bar({
group: true,
controls: [
selectCtrl,
new ol.control.Button({
html: '<i class="fa fa-undo" ></i>',
title: 'Reset',
handleClick: function() {
select.getFeatures().clear();
utilitiesSource.forEach(function(i) {
//console.log(i.getFeatures()); --> gives array of feature
i.getFeatures().forEach(function(f) {
f.setStyle(null);
});
})
}
})
]});
如果我使用瀏覽器的控制台並執行utilitiesSource.forEach(function(i) { i.getFeatures().forEach(function(j){ if (j.getProperties().id == 100) {j.setStyle(null);} else {j.setStyle([])} });});
我得到了我想要的東西
這是為什么? 為什么我無法獲得showUtility(id)中的功能?
(仍然沒有足夠的聲譽,所以我不得不在評論中笨拙地問問題-.-)
你有沒有試過在setTimeout()之后調用你的函數? geojson源異步加載數據,因此即使在最后一行代碼中調用它也可能為時過早。 我認為這應該是最新的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.