diff --git a/spec/suites/removeLayersSpec.js b/spec/suites/removeLayersSpec.js index 2193aca9..2bc9af62 100644 --- a/spec/suites/removeLayersSpec.js +++ b/spec/suites/removeLayersSpec.js @@ -11,9 +11,9 @@ div.style.width = '200px'; div.style.height = '200px'; document.body.appendChild(div); - + map = L.map(div, { maxZoom: 18, trackResize: false }); - + // Corresponds to zoom level 8 for the above div dimensions. map.fitBounds(new L.LatLngBounds([ [1, 1], @@ -171,4 +171,25 @@ expect(group.getLayers().length).to.be(0); }); + + it('chunked loading zoom out', function () { + //See #743 for more details + var markers = []; + + group = new L.MarkerClusterGroup({ + chunkedLoading: true, chunkProgress: function () { + //Before this provoked an "undefined" exception + map.zoomOut(); + group.removeLayers(markers); + } + }); + + for (var i = 1; i < 1000; i++) { + markers.push(new L.Marker([1.0 + (.0001 * i), 1.0 + (.0001 * i)])); + } + + map.addLayer(group); + + group.addLayers(markers); + }); }); diff --git a/src/MarkerCluster.js b/src/MarkerCluster.js index baef5791..6f5aa2d0 100644 --- a/src/MarkerCluster.js +++ b/src/MarkerCluster.js @@ -384,6 +384,9 @@ export var MarkerCluster = L.MarkerCluster = L.Marker.extend({ if (zoom < zoomLevelToStart || zoom < zoomLevelToStop) { for (i = childClusters.length - 1; i >= 0; i--) { c = childClusters[i]; + if (c._boundsNeedUpdate) { + c._recalculateBounds(); + } if (boundsToApplyTo.intersects(c._bounds)) { c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel); }