Create a custom event type for vector layers

Vector layers will now dispatch ol.layer.VectorLayerEventType.ADD and
ol.layer.VectorLayerEventType.REMOVE event types instead of the generic
goog.events.EventType.CHANGE event type.
This will fix a maximum call stack size exceeded javascript error.
This commit is contained in:
Bruno Binet
2013-08-01 17:36:46 +02:00
parent e4c36378ac
commit 3ecb5b89ff
2 changed files with 19 additions and 8 deletions

View File

@@ -1,8 +1,8 @@
goog.provide('ol.layer.Vector'); goog.provide('ol.layer.Vector');
goog.provide('ol.layer.VectorLayerEventType');
goog.require('goog.array'); goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.events.EventType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.expr'); goog.require('ol.expr');
@@ -221,10 +221,18 @@ ol.layer.FeatureCache.prototype.remove = function(feature) {
/** /**
* TODO: Create a VectorLayerEvent with ADD and REMOVE event types * @enum {string}
*/
ol.layer.VectorLayerEventType = {
ADD: 'add',
REMOVE: 'remove'
};
/**
* @typedef {{extent: (ol.Extent|undefined), * @typedef {{extent: (ol.Extent|undefined),
* features: (Array.<ol.Feature>|undefined), * features: (Array.<ol.Feature>|undefined),
* type: goog.events.EventType}} * type: ol.layer.VectorLayerEventType}}
*/ */
ol.layer.VectorLayerEventObject; ol.layer.VectorLayerEventObject;
@@ -304,7 +312,7 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({ this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
extent: extent, extent: extent,
features: features, features: features,
type: goog.events.EventType.CHANGE type: ol.layer.VectorLayerEventType.ADD
})); }));
}; };
@@ -517,7 +525,7 @@ ol.layer.Vector.prototype.removeFeatures = function(features) {
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({ this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
extent: extent, extent: extent,
features: features, features: features,
type: goog.events.EventType.CHANGE type: ol.layer.VectorLayerEventType.REMOVE
})); }));
}; };

View File

@@ -3,7 +3,6 @@ goog.provide('ol.renderer.canvas.VectorLayer');
goog.require('goog.dom'); goog.require('goog.dom');
goog.require('goog.dom.TagName'); goog.require('goog.dom.TagName');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('goog.vec.Mat4'); goog.require('goog.vec.Mat4');
goog.require('ol.Pixel'); goog.require('ol.Pixel');
@@ -14,6 +13,7 @@ goog.require('ol.ViewHint');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
goog.require('ol.layer.Vector'); goog.require('ol.layer.Vector');
goog.require('ol.layer.VectorLayerEventType');
goog.require('ol.renderer.canvas.Layer'); goog.require('ol.renderer.canvas.Layer');
goog.require('ol.renderer.canvas.VectorRenderer'); goog.require('ol.renderer.canvas.VectorRenderer');
goog.require('ol.tilegrid.TileGrid'); goog.require('ol.tilegrid.TileGrid');
@@ -86,7 +86,10 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) {
*/ */
this.tileCache_ = new ol.TileCache( this.tileCache_ = new ol.TileCache(
ol.renderer.canvas.VectorLayer.TILECACHE_SIZE); ol.renderer.canvas.VectorLayer.TILECACHE_SIZE);
goog.events.listen(layer, goog.events.EventType.CHANGE, goog.events.listen(layer, [
ol.layer.VectorLayerEventType.ADD,
ol.layer.VectorLayerEventType.REMOVE
],
this.handleLayerChange_, false, this); this.handleLayerChange_, false, this);
/** /**