Я пытаюсь показать только определенную функцию из моего векторного источника.поэтому я делаю такую функцию:
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()
всегда даетпустой массив, хотя это нормально, если бы я использовал его в EventListener, как эти:
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)?