Refactored event handling to allow unregistration of event listeners.
git-svn-id: http://svn.openlayers.org/trunk/openlayers@570 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -56,10 +56,24 @@ OpenLayers.Events.prototype = {
|
|||||||
* @param {Function} func
|
* @param {Function} func
|
||||||
*/
|
*/
|
||||||
register: function (type, obj, func) {
|
register: function (type, obj, func) {
|
||||||
|
if (func == null) {
|
||||||
|
obj = this.object;
|
||||||
|
func = obj;
|
||||||
|
}
|
||||||
var listeners = this.listeners[type];
|
var listeners = this.listeners[type];
|
||||||
listeners.push( func.bindAsEventListener(obj) );
|
listeners.push( {obj: obj, func: func} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
unregister: function (type, obj, func) {
|
||||||
|
var listeners = this.listeners[type];
|
||||||
|
for (var i = 0; i < listeners.length; i++) {
|
||||||
|
if (listeners[i].obj == obj && listeners[i].type == type) {
|
||||||
|
listeners.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
remove: function(type) {
|
remove: function(type) {
|
||||||
this.listeners[type].pop();
|
this.listeners[type].pop();
|
||||||
},
|
},
|
||||||
@@ -100,7 +114,8 @@ OpenLayers.Events.prototype = {
|
|||||||
var listeners = this.listeners[type];
|
var listeners = this.listeners[type];
|
||||||
for (var i = 0; i < listeners.length; i++) {
|
for (var i = 0; i < listeners.length; i++) {
|
||||||
var callback = listeners[i];
|
var callback = listeners[i];
|
||||||
callback(evt);
|
var continueChain = callback.func.call(callback.obj, evt);
|
||||||
|
if (continueChain != null && !continueChain) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user