diff --git a/lib/OpenLayers/Strategy/Fixed.js b/lib/OpenLayers/Strategy/Fixed.js index e9572dbf23..43ad55243d 100644 --- a/lib/OpenLayers/Strategy/Fixed.js +++ b/lib/OpenLayers/Strategy/Fixed.js @@ -14,6 +14,14 @@ * - */ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, { + + /** + * APIProperty: preload + * {Boolean} Load data before layer made visible. Enabling this may result + * in considerable overhead if your application loads many data layers + * that are not visible by default. Default is true. + */ + preload: false, /** * Constructor: OpenLayers.Strategy.Fixed @@ -37,8 +45,7 @@ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, { /** * Method: activate - * Activate the strategy: reads all features from the protocol and add them - * to the layer. + * Activate the strategy: load data or add listener to load when visible * * Returns: * {Boolean} True if the strategy was successfully activated or false if @@ -46,14 +53,33 @@ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, { */ activate: function() { if(OpenLayers.Strategy.prototype.activate.apply(this, arguments)) { - this.layer.protocol.read({ - callback: this.merge, - scope: this - }); + if(this.layer.visibility == true || this.preload) { + this.load(); + } else { + this.layer.events.on({ + "visibilitychanged": this.load, + scope: this + }); + } return true; } return false; }, + + /** + * Method: load + * Tells protocol to load data and unhooks the visibilitychanged event + */ + load: function() { + this.layer.protocol.read({ + callback: this.merge, + scope: this + }); + this.layer.events.un({ + "visibilitychanged": this.load, + scope: this + }); + }, /** * Method: merge diff --git a/tests/Strategy/Fixed.html b/tests/Strategy/Fixed.html index 2c791c6b24..c529435e1f 100644 --- a/tests/Strategy/Fixed.html +++ b/tests/Strategy/Fixed.html @@ -4,26 +4,55 @@