]> source.dussan.org Git - jquery-ui.git/commitdiff
Widget: Allow this.element to be the widget instance instead of a DOM element. Fixes...
authorScott González <scott.gonzalez@gmail.com>
Mon, 24 Jan 2011 18:33:24 +0000 (13:33 -0500)
committerScott González <scott.gonzalez@gmail.com>
Mon, 24 Jan 2011 18:33:24 +0000 (13:33 -0500)
tests/unit/widget/widget_core.js
ui/jquery.ui.widget.js

index 189b75368bfcb58d9a92c3121e0ce81ce4b1f1ac..269b897c5a9e392b62058fdaa5ad368e6de9165b 100644 (file)
@@ -27,7 +27,7 @@ test( "widget creation", function() {
 });
 
 test( "element normalization", function() {
-       expect( 10 );
+       expect( 12 );
        var elem;
        $.widget( "ui.testWidget", {} );
 
@@ -65,6 +65,14 @@ test( "element normalization", function() {
                same( elem.data( "testWidget" ), this, "instace stored in .data()" );
        };
        $.ui.testWidget( {}, "#element-normalization-selector" );
+
+       $.ui.testWidget.prototype.defaultElement = null;
+       $.ui.testWidget.prototype._create = function() {
+               // using strictEqual throws an error (Maximum call stack size exceeded)
+               ok( this.element[ 0 ] === this, "instance as element" );
+               ok( this.element.data( "testWidget" ) === this, "instance stored in .data()" );
+       };
+       $.ui.testWidget();
 });
 
 test( "jQuery usage", function() {
@@ -573,6 +581,28 @@ test( "._trigger() - provide event and ui", function() {
        .testWidget( "testEvent" );
 });
 
+test( "._triger() - instance as element", function() {
+       expect( 4 );
+       $.widget( "ui.testWidget", {
+               defaultElement: null,
+               testEvent: function() {
+                       var ui = { foo: "bar" };
+                       this._trigger( "foo", null, ui );
+               }
+       });
+       var instance = $.ui.testWidget({
+               foo: function( event, ui ) {
+                       equal( event.type, "testwidgetfoo", "event object passed to callback" );
+                       same( ui, { foo: "bar" }, "ui object passed to callback" );
+               }
+       });
+       $( instance ).bind( "testwidgetfoo", function( event, ui ) {
+               equal( event.type, "testwidgetfoo", "event object passed to event handler" );
+               same( ui, { foo: "bar" }, "ui object passed to event handler" );
+       });
+       instance.testEvent();
+});
+
 test( "auto-destroy - .remove()", function() {
        expect( 1 );
        $.widget( "ui.testWidget", {
index f6089519b28fa81a38595cae165137115ea487a8..7dfcb4447c5b98ae089355a8ffa84f71161e15b8 100644 (file)
@@ -133,7 +133,7 @@ $.Widget.prototype = {
                disabled: false
        },
        _createWidget: function( options, element ) {
-               element = $( element || this.defaultElement )[ 0 ];
+               element = $( element || this.defaultElement || this )[ 0 ];
                $.data( element, this.widgetName, this );
                this.element = $( element );
                this.options = $.extend( true, {},