簡體   English   中英

OpenLayers:我不能在事件偵聽器之外獲取VectorSource的功能嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM