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.
|
* element - {DOMElement} A reference to layer.events.element.
|
||||||
*
|
*
|
||||||
* Supported map event types:
|
* 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
|
* loadend - Triggered when layer loading ends. When using Fixed or BBOX
|
||||||
* strategies, the event object includes a *response* property holding
|
* strategies, the event object includes a *response* property holding
|
||||||
* an OpenLayers.Protocol.Response object.
|
* an OpenLayers.Protocol.Response object.
|
||||||
|
|||||||
@@ -217,10 +217,11 @@ OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, {
|
|||||||
this.layer.protocol.abort(this.response);
|
this.layer.protocol.abort(this.response);
|
||||||
this.layer.events.triggerEvent("loadend");
|
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(
|
this.response = this.layer.protocol.read(
|
||||||
OpenLayers.Util.applyDefaults({
|
OpenLayers.Util.applyDefaults({
|
||||||
filter: this.createFilter(),
|
filter: filter,
|
||||||
callback: this.merge,
|
callback: this.merge,
|
||||||
scope: this
|
scope: this
|
||||||
}, options));
|
}, options));
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, {
|
|||||||
*/
|
*/
|
||||||
load: function(options) {
|
load: function(options) {
|
||||||
var layer = this.layer;
|
var layer = this.layer;
|
||||||
layer.events.triggerEvent("loadstart");
|
layer.events.triggerEvent("loadstart", {filter: layer.filter});
|
||||||
layer.protocol.read(OpenLayers.Util.applyDefaults({
|
layer.protocol.read(OpenLayers.Util.applyDefaults({
|
||||||
callback: OpenLayers.Function.bind(this.merge, this,
|
callback: OpenLayers.Function.bind(this.merge, this,
|
||||||
layer.map.getProjectionObject()),
|
layer.map.getProjectionObject()),
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
function test_events(t) {
|
function test_events(t) {
|
||||||
|
|
||||||
t.plan(6);
|
t.plan(7);
|
||||||
|
|
||||||
var log = [];
|
var log = [];
|
||||||
|
|
||||||
@@ -141,6 +141,7 @@
|
|||||||
|
|
||||||
t.eq(log.length, 2, "2 events logged");
|
t.eq(log.length, 2, "2 events logged");
|
||||||
t.eq(log[0].type, "loadstart", "loadstart first");
|
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.eq(log[1].type, "loadend", "loadend second");
|
||||||
t.ok(log[1].response == response, "loadend includes response");
|
t.ok(log[1].response == response, "loadend includes response");
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
|
|
||||||
function test_events(t) {
|
function test_events(t) {
|
||||||
|
|
||||||
t.plan(6);
|
t.plan(7);
|
||||||
|
|
||||||
var log = [];
|
var log = [];
|
||||||
|
|
||||||
@@ -70,6 +70,11 @@
|
|||||||
|
|
||||||
var map = new OpenLayers.Map("map");
|
var map = new OpenLayers.Map("map");
|
||||||
var layer = new OpenLayers.Layer.Vector(null, {
|
var layer = new OpenLayers.Layer.Vector(null, {
|
||||||
|
filter: new OpenLayers.Filter.Comparison({
|
||||||
|
type: '==',
|
||||||
|
property: 'foo',
|
||||||
|
value: 'bar'
|
||||||
|
}),
|
||||||
strategies: [new OpenLayers.Strategy.Fixed()],
|
strategies: [new OpenLayers.Strategy.Fixed()],
|
||||||
protocol: new OpenLayers.Protocol({
|
protocol: new OpenLayers.Protocol({
|
||||||
read: function(config) {
|
read: function(config) {
|
||||||
@@ -92,6 +97,7 @@
|
|||||||
|
|
||||||
t.eq(log.length, 2, "2 events logged");
|
t.eq(log.length, 2, "2 events logged");
|
||||||
t.eq(log[0].type, "loadstart", "loadstart first");
|
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.eq(log[1].type, "loadend", "loadend second");
|
||||||
t.ok(log[1].response == response, "loadend includes response");
|
t.ok(log[1].response == response, "loadend includes response");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user