Changeset 5398
- Timestamp:
- 12/13/07 12:30:52 (1 year ago)
- Files:
-
- trunk/openlayers/lib/OpenLayers/Events.js (modified) (4 diffs)
- trunk/openlayers/tests/test_Events.html (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/lib/OpenLayers/Events.js
r5241 r5398 587 587 /** 588 588 * APIMethod: triggerEvent 589 * Trigger a specified registered event 589 * Trigger a specified registered event. 590 590 * 591 591 * Parameters: 592 592 * type - {String} 593 * evt - {Event} 594 */ 595 triggerEvent: function (type, evt) { 593 * evt - {Event} 594 * args - {Array} Optional array of arguments to call the listener with. 595 * 596 * Returns: 597 * {Boolean} The last listener return. If a listener returns false, the 598 * chain of listeners will stop getting called. 599 */ 600 triggerEvent: function (type, evt, args) { 596 601 597 602 // prep evt object with object & div references … … 601 606 evt.object = this.object; 602 607 evt.element = this.element; 608 609 if(!args) { 610 args = [evt]; 611 } else { 612 args.unshift(evt); 613 } 603 614 604 615 // execute all callbacks registered for specified type … … 608 619 this.listeners[type].slice() : null; 609 620 if ((listeners != null) && (listeners.length > 0)) { 621 var continueChain; 610 622 for (var i = 0; i < listeners.length; i++) { 611 623 var callback = listeners[i]; 612 var continueChain; 613 if (callback.obj != null) { 614 // use the 'call' method to bind the context to callback.obj 615 continueChain = callback.func.call(callback.obj, evt); 616 } else { 617 continueChain = callback.func(evt); 618 } 619 620 if ((continueChain != null) && (continueChain == false)) { 624 // bind the context to callback.obj 625 continueChain = callback.func.apply(callback.obj, args); 626 627 if ((continueChain != undefined) && (continueChain == false)) { 621 628 // if callback returns false, execute no more callbacks. 622 629 break; … … 628 635 } 629 636 } 637 return continueChain; 630 638 }, 631 639 trunk/openlayers/tests/test_Events.html
r4271 r5398 153 153 function test_04_Events_triggerEvent(t) { 154 154 155 t.plan( 6);155 t.plan(13); 156 156 157 157 var mapDiv = OpenLayers.Util.getElement('map'); … … 200 200 events.triggerEvent("doThingC"); 201 201 202 t.eq(a, 5, "if Events has no object set and an event is registered also with no object, triggerEvent() calls it without trying to set the context to null"); 202 t.eq(a, 5, "if Events has no object set and an event is registered also with no object, triggerEvent() calls it without trying to set the context to null"); 203 204 // trigger events with additional arguments 205 eventTypes = ["something"]; 206 events = new OpenLayers.Events(null, null, eventTypes); 207 var instance = {id: Math.random()}; 208 var listener = function() { 209 t.eq(this.id, instance.id, 210 "listener called with proper scope"); 211 t.eq(arguments[0].id, evt.id, 212 "listener called with evt as first arg"); 213 t.eq(arguments[1], "arg1", 214 "listener called with correct extra arg1"); 215 t.eq(arguments[2], "arg2", 216 "listener called with correct extra arg2"); 217 }; 218 events.register("something", instance, listener); 219 var evt = {id: Math.random()}; 220 events.triggerEvent("something", evt, ["arg1", "arg2", "arg3"]); 221 events.unregister("something", instance, listener); 222 223 // test return from triggerEvent 224 var listener1 = function() { 225 return "foo"; 226 } 227 var listener2 = function() { 228 return false; 229 } 230 var listener3 = function() { 231 t.fail("never call me again!"); 232 } 233 events.register("something", instance, listener1); 234 var ret = events.triggerEvent("something", evt); 235 t.eq(ret, "foo", "correct return from single listener"); 236 237 events.register("something", instance, listener2); 238 ret = events.triggerEvent("something", evt); 239 t.eq(ret, false, "correct return for two listeners"); 240 241 events.register("something", instance, listener3); 242 ret = events.triggerEvent("something", evt); 243 t.eq(ret, false, "correct return for three listeners where second cancels"); 244 245 events.unregister("something", instance, listener1); 246 events.unregister("something", instance, listener2); 247 events.unregister("something", instance, listener3); 248 203 249 } 204 250
