来自URL和setFilter()的GeoJSON Marker不再有自定义弹出窗口

时间:2014-03-28 15:14:00

标签: mapbox

我尝试加载geoJson,然后对这些poi应用过滤器。每个标记都有一个自定义弹出窗口。 在每个标记上绑定自定义弹出窗口工作正常,直到我在featureLayer上调用setFilter()。 基本上我的代码看起来像这样

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不起作用,似乎它不是同一个对象)

谢谢你!

1 个答案:

答案 0 :(得分:2)

.setFilter()重置图层的内容,因此这是预期的行为 - 调用它会替换图层的内容,包括任何自定义弹出窗口。如果要在将图层添加到地图时绑定弹出窗口,可以使用.on('layeradd'事件。