Event handler cleanup for tiled images in world

This commit is contained in:
Ian Gilman 2014-11-12 16:44:11 -08:00
parent 1ed80b0d27
commit 9347cfe692

View File

@ -43,6 +43,8 @@
* @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this World. * @param {OpenSeadragon.Viewer} options.viewer - The Viewer that owns this World.
**/ **/
$.World = function( options ) { $.World = function( options ) {
var _this = this;
$.console.assert( options.viewer, "[World] options.viewer is required" ); $.console.assert( options.viewer, "[World] options.viewer is required" );
$.EventSource.call( this ); $.EventSource.call( this );
@ -50,6 +52,10 @@ $.World = function( options ) {
this.viewer = options.viewer; this.viewer = options.viewer;
this._items = []; this._items = [];
this._needsUpdate = false; this._needsUpdate = false;
this._delegatedFigureSizes = function(event) {
_this._figureSizes();
};
this._figureSizes(); this._figureSizes();
}; };
@ -62,8 +68,6 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
* @fires OpenSeadragon.World.event:home-bounds-change * @fires OpenSeadragon.World.event:home-bounds-change
*/ */
addItem: function( item, options ) { addItem: function( item, options ) {
var _this = this;
$.console.assert(item, "[World.addItem] item is required"); $.console.assert(item, "[World.addItem] item is required");
$.console.assert(item instanceof $.TiledImage, "[World.addItem] only TiledImages supported at this time"); $.console.assert(item instanceof $.TiledImage, "[World.addItem] only TiledImages supported at this time");
@ -78,10 +82,7 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
this._figureSizes(); this._figureSizes();
this._needsUpdate = true; this._needsUpdate = true;
// TODO: remove handler when removing item from world item.addHandler('bounds-change', this._delegatedFigureSizes);
item.addHandler('bounds-change', function(event) {
_this._figureSizes();
});
/** /**
* Raised when an item is added to the World. * Raised when an item is added to the World.
@ -181,6 +182,7 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
return; return;
} }
item.removeHandler('bounds-change', this._delegatedFigureSizes);
this._items.splice( index, 1 ); this._items.splice( index, 1 );
this._figureSizes(); this._figureSizes();
this._needsUpdate = true; this._needsUpdate = true;
@ -193,13 +195,20 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
* @fires OpenSeadragon.World.event:home-bounds-change * @fires OpenSeadragon.World.event:home-bounds-change
*/ */
removeAll: function() { removeAll: function() {
var item;
for (var i = 0; i < this._items.length; i++) {
item = this._items[i];
item.removeHandler('bounds-change', this._delegatedFigureSizes);
}
var removedItems = this._items; var removedItems = this._items;
this._items = []; this._items = [];
this._figureSizes(); this._figureSizes();
this._needsUpdate = true; this._needsUpdate = true;
for (var i = 0; i < removedItems.length; i++) { for (i = 0; i < removedItems.length; i++) {
this._raiseRemoveItem(removedItems[i]); item = removedItems[i];
this._raiseRemoveItem(item);
} }
}, },