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:
@@ -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.
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user