From afb80bfe4899e9ffd3962bd0adcc82019647717d Mon Sep 17 00:00:00 2001 From: bartvde Date: Tue, 1 Mar 2011 14:03:31 +0000 Subject: [PATCH] Vector layer with BBOX Strategy isn't loaded/requested automatically, p=vmische, r=me (closes #3142) git-svn-id: http://svn.openlayers.org/trunk/openlayers@11598 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Strategy/BBOX.js | 18 ++++++++++++++---- tests/Strategy/BBOX.html | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/lib/OpenLayers/Strategy/BBOX.js b/lib/OpenLayers/Strategy/BBOX.js index c194cb4751..36354ccb12 100644 --- a/lib/OpenLayers/Strategy/BBOX.js +++ b/lib/OpenLayers/Strategy/BBOX.js @@ -90,6 +90,14 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, { "refresh": this.update, scope: this }); + if(this.layer.visibility == true) { + this.update(); + } else { + this.layer.events.on({ + "visibilitychanged": this.update, + scope: this + }); + } } return activated; }, @@ -106,10 +114,8 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, { if(deactivated) { this.layer.events.un({ "moveend": this.update, - scope: this - }); - this.layer.events.un({ "refresh": this.update, + "visibilitychanged": this.update, scope: this }); } @@ -127,7 +133,8 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, { */ update: function(options) { var mapBounds = this.getMapBounds(); - if ((options && options.force) || this.invalidBounds(mapBounds)) { + if (mapBounds !== null && ((options && options.force) || + this.invalidBounds(mapBounds))) { this.calculateBounds(mapBounds); this.resolution = this.layer.map.getResolution(); this.triggerRead(); @@ -142,6 +149,9 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, { * {} Map bounds in the projection of the layer. */ getMapBounds: function() { + if (this.layer.map === null) { + return null; + } var bounds = this.layer.map.getExtent(); if(!this.layer.projection.equals(this.layer.map.getProjectionObject())) { bounds = bounds.clone().transform( diff --git a/tests/Strategy/BBOX.html b/tests/Strategy/BBOX.html index 12543c627d..60e190d2a4 100644 --- a/tests/Strategy/BBOX.html +++ b/tests/Strategy/BBOX.html @@ -270,6 +270,29 @@ } + // Test fix for Ticket #3142 + function test_layerLoadedAfterBeingAdded(t) { + t.plan(1); + + var dummy = new OpenLayers.Layer(null, {isBaseLayer: true}); + + var strategy = new OpenLayers.Strategy.BBOX({ + ratio: 1 // makes for easier comparison to map bounds + }); + var layer = new OpenLayers.Layer.Vector(null, { + protocol: new OpenLayers.Protocol(), + strategies: [strategy] + }); + + var map = new OpenLayers.Map("map"); + map.addLayer(dummy); + map.setCenter(new OpenLayers.LonLat(0, 0)); + map.addLayer(layer); + + // test that the strategy bounds were set + t.ok(map.getExtent().equals(strategy.bounds), "[set center] bounds set to map extent"); + } +