Committer: anazarov
LJSUP-13138: Extend basicWidget pub/sub system with _one methodU trunk/htdocs/js/jquery/jquery.lj.basicWidget.js
Modified: trunk/htdocs/js/jquery/jquery.lj.basicWidget.js =================================================================== --- trunk/htdocs/js/jquery/jquery.lj.basicWidget.js 2012-08-01 13:10:49 UTC (rev 12393) +++ trunk/htdocs/js/jquery/jquery.lj.basicWidget.js 2012-08-01 13:46:51 UTC (rev 12394) @@ -103,11 +103,23 @@ __callbacks[ type ].push( { fn: callback, - owner: this + owner: this, + once: false } ); }, /** + * Subscribe to one selected event with the callback. + * + * @param {String} type Event type. + * @param {Function} callback Function that should be fired on the event. + */ + _one: function( type, callback ) { + this._on( type, callback ); + __callbacks[ type ][ __callbacks[ type ].length - 1 ].once = true; + }, + + /** * Remove subscription on the event. * * @param {String} type Event type. @@ -147,11 +159,14 @@ } //we delete supressed event flag only after firing event because - //wedget can subscribe more than one callback + //widget can subscribe more than one callback while(cbs[ --i ]) { if( type in cbs[ i ].owner.__suppressedEvents ) { delete cbs[ i ].owner.__suppressedEvents[ type ]; } + + //delete callbacks that should be fired only once + if( cbs[ i ].once ) { cbs.splice(i, 1); } } } },