aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJörn Zaefferer <joern.zaefferer@gmail.com>2011-09-12 23:37:14 +0200
committerJörn Zaefferer <joern.zaefferer@gmail.com>2011-09-12 23:37:14 +0200
commit2a6ca3fb394f2caee6ad92c4dfc76ac66553cd46 (patch)
tree429e26e4dc650b865f5beffbecc64f2f6f1d2278
parentd12180d1a5ae5f07f112aaeebbfc295f2fe104d8 (diff)
downloadjquery-ui-2a6ca3fb394f2caee6ad92c4dfc76ac66553cd46.tar.gz
jquery-ui-2a6ca3fb394f2caee6ad92c4dfc76ac66553cd46.zip
Widget: Add a _delay method. Will be used in various places to replace setTimeout with custom binding (mostly getting rid of var self/that)
-rw-r--r--tests/unit/widget/widget_core.js24
-rw-r--r--ui/jquery.ui.widget.js9
2 files changed, 33 insertions, 0 deletions
diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js
index 0c4142539..0b272a0d5 100644
--- a/tests/unit/widget/widget_core.js
+++ b/tests/unit/widget/widget_core.js
@@ -1040,4 +1040,28 @@ test( "redefine", function() {
equal( $.ui.testWidget.foo, "bar", "static properties remain" );
});
+asyncTest( "_delay", function() {
+ expect( 4 );
+ var order = 0,
+ that;
+ $.widget( "ui.testWidget", {
+ defaultElement: null,
+ _create: function() {
+ that = this;
+ this._delay(function() {
+ strictEqual( this, that );
+ equal( order, 1 );
+ start();
+ }, 500);
+ this._delay("callback");
+ },
+ callback: function() {
+ strictEqual( this, that );
+ equal( order, 0 );
+ order += 1;
+ }
+ });
+ $( "#widget" ).testWidget();
+});
+
}( jQuery ) );
diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js
index 5b7942600..729e14cf9 100644
--- a/ui/jquery.ui.widget.js
+++ b/ui/jquery.ui.widget.js
@@ -333,6 +333,15 @@ $.Widget.prototype = {
});
},
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ setTimeout( handlerProxy, delay || 0 );
+ },
+
_hoverable: function( element ) {
this.hoverable = this.hoverable.add( element );
this._bind( element, {