Make WordPress Core

Changeset 20797


Ignore:
Timestamp:
05/15/2012 10:01:36 PM (12 years ago)
Author:
koopersmith
Message:

Theme Customizer: Make wp.customize.Values.when return a jQuery.Deferred.promise() object, to add additional flexibility. see #19910.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/js/customize-base.dev.js

    r20795 r20797  
    332332         * Runs a callback once all requested values exist.
    333333         *
    334          * when( ids*, callback );
     334         * when( ids*, [callback] );
    335335         *
    336336         * For example:
    337337         *     when( id1, id2, id3, function( value1, value2, value3 ) {} );
     338         *
     339         * @returns $.Deferred.promise();
    338340         */
    339341        when: function() {
    340342            var self = this,
    341                 ids = slice.call( arguments ),
    342                 callback = ids.pop();
     343                ids  = slice.call( arguments ),
     344                dfd  = $.Deferred();
     345
     346            // If the last argument is a callback, bind it to .done()
     347            if ( $.isFunction( ids[ ids.length - 1 ] ) )
     348                dfd.done( ids.pop() );
    343349
    344350            $.when.apply( $, $.map( ids, function( id ) {
     
    346352                    return;
    347353
    348                 return self._deferreds[ id ] || ( self._deferreds[ id ] = $.Deferred() );
     354                return self._deferreds[ id ] = self._deferreds[ id ] || $.Deferred();
    349355            })).done( function() {
    350356                var values = $.map( ids, function( id ) {
     
    353359
    354360                // If a value is missing, we've used at least one expired deferred.
    355                 // Call Values.when again to update our master deferred.
     361                // Call Values.when again to generate a new deferred.
    356362                if ( values.length !== ids.length ) {
    357                     ids.push( callback );
    358                     self.when.apply( self, ids );
     363                    // ids.push( callback );
     364                    self.when.apply( self, ids ).done( function() {
     365                        dfd.resolveWith( self, values );
     366                    });
    359367                    return;
    360368                }
    361369
    362                 callback.apply( self, values );
     370                dfd.resolveWith( self, values );
    363371            });
     372
     373            return dfd.promise();
    364374        }
    365375    });
Note: See TracChangeset for help on using the changeset viewer.