From: Michael DellaNoce Date: Tue, 1 Feb 2011 11:57:48 +0000 (-0500) Subject: Widget: Modified _trigger to invoke callbacks with apply so that handlers are invoked... X-Git-Tag: 1.9m4~37 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b3fcf174716203013e9844f1aee3216f971fcd43;p=jquery-ui.git Widget: Modified _trigger to invoke callbacks with apply so that handlers are invoked the same way .trigger() invokes them. Fixes #6795 - Widget: _trigger passes array arguments to handlers inconsistently. --- diff --git a/tests/unit/widget/widget_tickets.js b/tests/unit/widget/widget_tickets.js index 0267c8ff4..9c0bddf03 100644 --- a/tests/unit/widget/widget_tickets.js +++ b/tests/unit/widget/widget_tickets.js @@ -40,4 +40,52 @@ test( "#5830 - Widget: Using inheritance overwrites the base classes options", f delete $.ui.testWidgetExtension; }); +test( "#6795 - Widget: handle array arguments to _trigger consistently", function() { + expect( 4 ); + + $.widget( "ui.testWidget", { + _create: function() {}, + testEvent: function() { + var ui = { + foo: "bar", + baz: { + qux: 5, + quux: 20 + } + }; + var extra = { + bar: 5 + }; + this._trigger( "foo", null, [ ui, extra ] ); + } + }); + $( "#widget" ).bind( "testwidgetfoo", function( event, ui, extra ) { + same( ui, { + foo: "bar", + baz: { + qux: 5, + quux: 20 + } + }, "event: ui hash passed" ); + same( extra, { + bar: 5 + }, "event: extra argument passed" ); + }); + $( "#widget" ).testWidget({ + foo: function( event, ui, extra ) { + same( ui, { + foo: "bar", + baz: { + qux: 5, + quux: 20 + } + }, "callback: ui hash passed" ); + same( extra, { + bar: 5 + }, "callback: extra argument passed" ); + } + }) + .testWidget( "testEvent" ); +}); + }( jQuery ) ); diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index c8e5348ac..1ec934469 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -289,7 +289,8 @@ $.Widget.prototype = { }, _trigger: function( type, event, data ) { - var callback = this.options[ type ]; + var callback = this.options[ type ], + args; event = $.Event( event ); event.type = ( type === this.widgetEventPrefix ? @@ -309,8 +310,12 @@ $.Widget.prototype = { this.element.trigger( event, data ); - return !( $.isFunction(callback) && - callback.call( this.element[0], event, data ) === false || + args = $.isArray( data ) ? + [ event ].concat( data ) : + [ event, data ]; + + return !( $.isFunction( callback ) && + callback.apply( this.element[0], args ) === false || event.isDefaultPrevented() ); } };