2014-03-28 46 views
2

我嘗試加載geoJson,然後對這些pois應用過濾器。每個標記都有一個自定義彈出框 在每個標記上綁定自定義彈出窗口都可以正常工作,直到我調用我的featureLayer上的setFilter()。 基本上我的代碼看起來像這樣來自URL和setFilter()的GeoJSON標記,然後沒有更多的自定義彈出

var map; 
var featureLayer; 

    function initMap(mapInfos){ 

      var southWest = L.latLng(mapInfos.sw.lat, mapInfos.sw.lng), 
       northEast = L.latLng(mapInfos.ne.lat, mapInfos.ne.lng), 
       bounds = L.latLngBounds(southWest, northEast); 

      map = L.mapbox 
        .map('map', 'oxyde.xxxxxx', {'maxBounds' : bounds}) 
        .setView([mapInfos.center.lat, mapInfos.center.lng], mapInfos.defaultZoom); 
      featureLayer = L.mapbox.featureLayer().loadURL('/pois').addTo(map); 
      featureLayer.on('ready', setContentToAllPois); 
      return mapInfos; 
    } 

    function setContentToAllPois(){ 
     var promises = new Array(); 
     featureLayer.eachLayer(function(layer) { 
       promises.push(setContentToPoi(layer)); 
     }); 
     $.when.apply($.when.apply, promises) 
      .done(doneLoadingPois) 
      .fail(logError); 
    } 

    function setContentToPoi(layer){ 
     var dfd = new jQuery.Deferred(), 
     poi = layer.feature.properties.poi; 

     $.get('/poi/' + poi._id + '/content') 
      .done(function(content){ 
       layer.bindPopup(content); 
       dfd.resolve(layer); 
      }) 
      .fail(function(e){ 
       dfd.reject(e); 
      }); 
     return dfd.promise(); 


function doneLoadingPois(){ 

     featureLayer.setFilter(function(feature) { 
      return true; 
     }) 

    } 

如果我評論在doneLoadingPois的彈出窗口顯示細膩使用setfilter(...)線。 1-我在這裏錯過了什麼? 2-爲什麼我必須使用featureLayer var? (使用map.featureLayer不工作,它似乎不是同一個對象)

謝謝!

回答

2

.setFilter()重置圖層的內容,因此這是預期的行爲 - 調用它將替換圖層的內容(包括任何自定義彈出窗口)。如果要在將圖層添加到地圖時綁定彈出窗口,則可以使用.on('layeradd'事件。

+1

對我而言,我不清楚哪些對象必須使用.on('layeradd')事件? –

+0

你有沒有得到答案?我有完全一樣的問題。 –

+0

對不起,我不再在這個項目上工作。我不記得我使用了哪種解決方法... –