3

アニメーション シーケンス中の Dojo Dijit Dialog .hide() メソッドに問題があります。Tundra テーマで Dojo 1.7 を使用しています。ダイアログに、ダイアログを閉じるキャンセル ボタンがあります。

        var global_welcome = new Dialog({
            id: 'global_welcome',
                style: "width: 750px",
            draggable: false,

        content: '<button type="button" id="global_welcomeCancel"> Cancel </button>',
        onShow : function () {
                                on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
                                    dojo.stopEvent(evt);
                                    global_welcome.hide();   
                                   });              
                                 });
        }
    });

これにより、Firebug で次のエラーが発生します。

exception in animation handler for: onEnd                  fx.js (line 152)

TypeError: this._fadeOutDeferred is undefined
this._fadeOutDeferred.callback(true);

このエラーに対する以前の回答ですが、 hide ではなく destroyRecursive を使用すると、アニメーションが終了する前にダイアログが破棄されることに関係していることがわかります。dojo.hitch() と setTimeOut を使用してみましたが、うまくいかないようでした。また、global_welcome.show() (別のボタンによって呼び出される) を使用してこのダイアログを初めて開き、キャンセル ボタンを押すと、エラーなしで動作することも不可解です。2 回目以降は、上記のエラー メッセージが表示されます。さらに、右上隅にある Dojo ダイアログのデフォルトの閉じるボタンによって、このエラーが発生することはありません。おそらく、閉じるボタンが呼び出すメソッドをonShowに呼び出させることができますか?

誰か助けてくれませんか?前もって感謝します!

4

1 に答える 1

2

問題はあなたのonShow方法にあります。クリック イベントに配線して非表示にしますが、切断しないでください。ダイアログを再度開くときは、クリック メソッドを配線して、ダイアログを再び非表示にします。その結果、ダイアログを 2 回目に閉じようとすると、hide が 2 回呼び出されます。アニメーションが既に破棄されているため、hide の 2 回目の呼び出しでエラーがスローされます。

これを試して:

var signal = on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
    dojo.stopEvent(evt);
    signal.remove();
    global_welcome.hide();   
}); 
于 2012-10-01T23:49:27.953 に答える