2

私は道場の世界に慣れていないので、これはおそらく私に苦労を与えているばかげた何かです.

私は次のコードを持っています(無関係なものを取り除きました):

define(["dojo/_base/declare", "dojo/fx", "dojo/on"],
    function (declare, fx, on) {
        return declare(null, {
            executeTransition: function (continuation) {
                var animation = fx.combine([
                    fx.slideTo({
                        duration: 1200,
                        node: this.node1, // node1 will be a valid node at the moment of execution
                        left: -this.node1.offsetWidth
                    }),
                    fx.slideTo({
                        duration: 1200,
                        node: this.node2, // node2 will be a valid node at the moment of execution
                        left: 0
                    })
                ]);

                on(animation, "End", continuation);

                animation.play();
            }
        });
    }
);

コードをそのまま実行すると、on行が失敗してUncaught Error: Target must be an event emitter. しかし、アニメーションなので、すでにイベント エミッターである必要がありますか?

私の問題を解決しようとして行ったいくつかの背景調査:

dojo.fxのリファレンス ガイドでは、 の結果をfx.combine他のアニメーションと同様に扱います。dojo.fxのAPI リファレンスには、インスタンスを返すとのみ記載されています。

いずれにせよ、Dojo 1.8 アニメーション チュートリアルには、私が実行しようとしているのとまったく同じ例がありますが、後で fx.combine の結果を fx.chain にラップする点が異なります (これは必要ありませんか?)。

そこで私の質問は、Dojo 1.8 を使用して、2 つのアニメーションを並行して実行し、それらが終了したときにコードを実行する方法を教えてください。

4

1 に答える 1

0

あなたの質問を読んだ後、私は調査することにしました。「ターゲットはイベントエミッターでなければなりません」というエラーは、結合されたアニメーションからonEndイベントをキャプチャしようとしたときにのみ発生することがわかりました。連鎖アニメーションでは発生しません。

調べてみると、結合されたアニメーションには _connects プロパティがあるように見え、古い減価償却済みの「dojo/_base/connect」機能を使用していることを示唆していることに気付きました。これはおそらく Dojo のバグ (というか、最新のアップグレードで見落とされたコード) です。Dojo Tracを調べましたが、まだ何も見つかりませんでした。おそらく、このチケットに対して新しいチケットが開かれるでしょう。

私が考えることができる2つの回避策があります:

  1. 「dojo/_base/connect」を使用

    connect.connect(animation, "onEnd", function(){
        // connect == dojo/base/connect
    })
    
  2. onEnd イベントに直接接続します (または"dojo/aspect"を使用します) 。

    animation.onEnd(function(){
    });
    

これらの方法はどちらも理想的ではありません。将来的にコードをdojo/onバージョンに変更する必要があるからです。

編集:他の誰かが既にこれをバグとして報告しているようです。ここを参照してください

于 2013-02-07T13:07:21.720 に答える