javascript – 如何使用jQuery Deferred与自定义事件?

我有两个抽象过程(例如,在js对象内使用不暴露其内部的显示模块模式进行管理),它们在完成时触发custom events。当两个自定义事件都触发时,我想执行一个操作。

jQuery 1.5中的新Deferred逻辑看起来像是一个理想的方法来管理这个,除了when()方法使用Deferred对象返回promise()(或普通的js对象,但是then())立即完成,而不是等待,这对我来说没用)。

理想情况下,我想做一些像:

//execute when both customevent1 and customevent2 have been fired
$.when('customevent1 customevent2').done(function(){
  //do something
});

结婚这两种技术最好的办法是什么?

http://jsfiddle.net/ch47n/

我创建了一个创建一个新的jQuery.fn.when方法的小插件。

语法是:

jQuery( "whatever" ).when( "event1 event2..." ).done( callback );

它在内部广泛使用jQuery.when(),并确保在解析之前对集合中的所有元素都触发了所有事件。

实际插件代码如下:

( function( $ ) {

    $.fn.when = function( events ) {

        var deferred, $element, elemIndex, eventIndex;

        // Get the list of events
        events = events.split( /\s+/g );

        // We will store one deferred per event and per element
        var deferreds = [];

        // For each element
        for( elemIndex = 0; elemIndex < this.length; elemIndex++ ) {
            $element = $( this[ elemIndex ] );
            // For each event
            for ( eventIndex = 0; eventIndex < events.length; eventIndex++ ) {
                // Store a Deferred...
                deferreds.push(( deferred = $.Deferred() ));
                // ... that is resolved when the event is fired on this element
                $element.one( events[ eventIndex ], deferred.resolve );
            }
        }

        // Return a promise resolved once all events fired on all elements
        return $.when.apply( null, deferreds );
    };

} )( jQuery );
http://stackoverflow.com/questions/5009194/how-to-use-jquery-deferred-with-custom-events

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 如何使用jQuery Deferred与自定义事件?