diff --git a/lib/OpenLayers/Tile.js b/lib/OpenLayers/Tile.js index 81f6cb4e54..d4a40bb317 100644 --- a/lib/OpenLayers/Tile.js +++ b/lib/OpenLayers/Tile.js @@ -38,6 +38,30 @@ OpenLayers.Tile = OpenLayers.Class({ */ events: null, + /** + * APIProperty: eventListeners + * {Object} If set as an option at construction, the eventListeners + * object will be registered with . Object + * structure must be a listeners object as shown in the example for + * the events.on method. + * + * This options can be set in the ``tileOptions`` option from + * . For example, to be notified of the + * ``loadend`` event of each tiles: + * (code) + * new OpenLayers.Layer.OSM('osm', 'http://tile.openstreetmap.org/${z}/${x}/${y}.png', { + * tileOptions: { + * eventListeners: { + * 'loadend': function(evt) { + * // do something on loadend + * } + * } + * } + * }); + * (end) + */ + eventListeners: null, + /** * Property: id * {String} null @@ -109,10 +133,13 @@ OpenLayers.Tile = OpenLayers.Class({ //give the tile a unique id based on its BBOX. this.id = OpenLayers.Util.createUniqueID("Tile_"); - - this.events = new OpenLayers.Events(this); OpenLayers.Util.extend(this, options); + + this.events = new OpenLayers.Events(this); + if (this.eventListeners instanceof Object) { + this.events.on(this.eventListeners); + } }, /** @@ -139,7 +166,11 @@ OpenLayers.Tile = OpenLayers.Class({ this.size = null; this.position = null; + if (this.eventListeners) { + this.events.un(this.eventListeners); + } this.events.destroy(); + this.eventListeners = null; this.events = null; }, diff --git a/tests/Tile.html b/tests/Tile.html index 9c0743a8d9..97120abc4e 100644 --- a/tests/Tile.html +++ b/tests/Tile.html @@ -22,7 +22,7 @@ function test_Tile_constructor (t) { - t.plan( 12 ); + t.plan( 13 ); setUp(); @@ -33,7 +33,11 @@ var url = "bobob"; var size = new OpenLayers.Size(5,6); - tile = new OpenLayers.Tile(layer, position, bounds, url, size); + tile = new OpenLayers.Tile(layer, position, bounds, url, size, { + eventListeners: { + loadstart: OpenLayers.Function.False + } + }); t.ok(tile instanceof OpenLayers.Tile, "new OpenLayers.Tile returns Tile object"); t.ok(tile.layer === layer, "tile.layer set correctly"); @@ -48,7 +52,9 @@ t.ok(tile.id != null, "tile is given an id"); t.ok(OpenLayers.String.startsWith(tile.id, "Tile_"), "tile's id starts correctly"); - t.ok(tile.events != null, "tile's events intitialized"); + t.ok(tile.events != null, "tile's events initialized"); + t.ok(tile.events.listeners.loadstart.length == 1, + "tile's events initialized from eventListeners option"); tearDown();