when using BBOX or Fixed strategies, pass on the filter used in the request to the loadstart event. This is mostly important in the case of BBOX, since there is no other way to get the filter used in the request. An example use case is doing a hitCount request using the same filter to find out the true number of features matched on the server-side

This commit is contained in:
Bart van den Eijnden
2012-11-07 11:43:18 +01:00
parent c420fc6aad
commit a4df9a871b
5 changed files with 17 additions and 6 deletions

View File

@@ -86,7 +86,10 @@ OpenLayers.Layer = OpenLayers.Class({
* element - {DOMElement} A reference to layer.events.element.
*
* Supported map event types:
* loadstart - Triggered when layer loading starts.
* loadstart - Triggered when layer loading starts. When using Fixed or
* BBOX strategies, the event object includes a *filter* property
* holding the OpenLayers.Filter used when calling read on the
* protocol.
* loadend - Triggered when layer loading ends. When using Fixed or BBOX
* strategies, the event object includes a *response* property holding
* an OpenLayers.Protocol.Response object.

View File

@@ -217,10 +217,11 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, {
this.layer.protocol.abort(this.response);
this.layer.events.triggerEvent("loadend");
}
this.layer.events.triggerEvent("loadstart");
var filter = this.createFilter();
this.layer.events.triggerEvent("loadstart", {filter: filter});
this.response = this.layer.protocol.read(
OpenLayers.Util.applyDefaults({
filter: this.createFilter(),
filter: filter,
callback: this.merge,
scope: this
}, options));

View File

@@ -88,7 +88,7 @@ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, {
*/
load: function(options) {
var layer = this.layer;
layer.events.triggerEvent("loadstart");
layer.events.triggerEvent("loadstart", {filter: layer.filter});
layer.protocol.read(OpenLayers.Util.applyDefaults({
callback: OpenLayers.Function.bind(this.merge, this,
layer.map.getProjectionObject()),

View File

@@ -112,7 +112,7 @@
function test_events(t) {
t.plan(6);
t.plan(7);
var log = [];
@@ -141,6 +141,7 @@
t.eq(log.length, 2, "2 events logged");
t.eq(log[0].type, "loadstart", "loadstart first");
t.ok(log[0].filter.type === OpenLayers.Filter.Spatial.BBOX, "loadstart includes filter used");
t.eq(log[1].type, "loadend", "loadend second");
t.ok(log[1].response == response, "loadend includes response");

View File

@@ -62,7 +62,7 @@
function test_events(t) {
t.plan(6);
t.plan(7);
var log = [];
@@ -70,6 +70,11 @@
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector(null, {
filter: new OpenLayers.Filter.Comparison({
type: '==',
property: 'foo',
value: 'bar'
}),
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol({
read: function(config) {
@@ -92,6 +97,7 @@
t.eq(log.length, 2, "2 events logged");
t.eq(log[0].type, "loadstart", "loadstart first");
t.eq(log[0].filter, layer.filter, "filter passed on as argument to loadstart");
t.eq(log[1].type, "loadend", "loadend second");
t.ok(log[1].response == response, "loadend includes response");