diff --git a/spec/suites/layer/vector/CanvasSpec.js b/spec/suites/layer/vector/CanvasSpec.js index bbe4481e1..a8416f536 100644 --- a/spec/suites/layer/vector/CanvasSpec.js +++ b/spec/suites/layer/vector/CanvasSpec.js @@ -222,6 +222,25 @@ describe('Canvas', () => { }, this); }); + it('adds vectors even if the canvas container was removed', (done) => { + const layer = new Circle([0, 0]).addTo(map); + map.eachLayer((layer) => { + map.removeLayer(layer); + }); + + const spy = sinon.spy(); + const canvas = map.getRenderer(layer); + canvas._redraw = spy; + + map.addLayer(layer); + + setTimeout(() => { + // we need the timeout, because else the requestAnimFrame is not called + expect(spy.callCount).to.eql(1); + done(); + }, 50); + }); + describe('#bringToBack', () => { it('is a no-op for layers not on a map', () => { const path = new Polyline([[1, 2], [3, 4], [5, 6]]); diff --git a/src/layer/vector/Canvas.js b/src/layer/vector/Canvas.js index a0ce2ae4c..bbb7501e1 100644 --- a/src/layer/vector/Canvas.js +++ b/src/layer/vector/Canvas.js @@ -79,6 +79,7 @@ export const Canvas = Renderer.extend({ _destroyContainer() { Util.cancelAnimFrame(this._redrawRequest); + this._redrawRequest = null; delete this._ctx; Renderer.prototype._destroyContainer.call(this); },