1

実行したい非同期イベントの数は可変です。すべて完了した後、さらにアクションを実行できるようにしたいと思います。以下のコードスニペットは、jqueryの遅延オブジェクトを使用してイベントを呼び出す試みを示しています。誰か助けてもらえますか?(コードがそのまま実行されないことはわかっています)。bubble.transitionToは非同期イベントです。alert('complete'); 非同期コールバックが完了する前、実際には実行される前に呼び出されます。

var events = [];
    for (var i = 0; i < stageBubbles.length; i++) {
        var element = stageBubbles[i];
        var bubble = new Object();
        bubble = this.dataPointLayer.get('#' + element.name)[0];
        bubble.setOpacity(0.5);
        events.push(bubble.transitionTo({
            x: element.x,
            y: element.y,
            radius: element.radius,
            duration: 3,
            easing: 'ease-in',
            callback: function () {

            }
        }));
    }
    $.when.apply(this, events).done(function () { alert('complete'); });
4

1 に答える 1

0

この transitionTo 関数はどこで定義されていますか? jQuery プロジェクトのどのドキュメントにも見つかりません。$.Deferred メソッドを実装していない可能性があります。

私の仮定が正しければ、このようなことを試すことができます。

 showBubbles = function (stageBubbles) {
        var events = [],
            deferred = $.Deferred(),
            completedCount = 0;

        for (var i = 0; i < stageBubbles.length; i++) {
            var element = stageBubbles[i];
            var bubble = new Object();
            bubble = this.dataPointLayer.get('#' + element.name)[0];
            bubble.setOpacity(0.5);
            bubble.transitionTo({
                x: element.x,
                y: element.y,
                radius: element.radius,
                duration: 3,
                easing: 'ease-in',
                callback: function () {
                    completedCount += 1;
                    if (completedCount == stageBubbles.length) {
                        deferred.resolve();
                    }
                }
            });
        }
        return deferred.promise();
    };
    $.when(showBubbles.call(this, stageBubbles)).done(function () { alert('complete'); });

この関数は、すべてのバブルに対してコールバックが呼び出されたときに解決される遅延オブジェクトを返します。

于 2012-12-07T11:37:40.550 に答える