Animation Dojo Dialog onEnd()动画异常

Animation Dojo Dialog onEnd()动画异常,animation,dialog,hide,dojo,Animation,Dialog,Hide,Dojo,在动画序列中,Dojo Dijit Dialog.hide()方法有问题。我正在使用Dojo1.7和Tundra主题。我的对话框中有一个“取消”按钮,用于关闭对话框 var global_welcome = new Dialog({ id: 'global_welcome', style: "width: 750px", draggable: false, content: '<

在动画序列中,Dojo Dijit Dialog.hide()方法有问题。我正在使用Dojo1.7和Tundra主题。我的对话框中有一个“取消”按钮,用于关闭对话框

        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();   
                                   });              
                                 });
        }
    });
以前对此错误的回答(但使用destroyRecursive而不是hide)表明,这与在动画完成之前销毁对话框有关。我尝试使用dojo.hitch()和setTimeOut,但似乎不起作用。同样令人费解的是,我第一次使用global_welcome.show()(由另一个按钮调用)打开此对话框并按下cancel按钮时,它不会出错。第二次以及之后,它将生成上述错误消息。此外,右上角dojo对话框的默认关闭按钮不会导致此错误。也许我可以让onShow调用close按钮调用的方法


有人能帮我吗?提前谢谢

问题在于您的
onShow
方法。连接到要隐藏的单击事件,但决不断开它的连接。再次打开对话框时,将连接click方法以再次隐藏对话框。结果是,当您第二次尝试关闭对话框时,hide将被调用两次。第二次调用hide时抛出错误,因为动画已被销毁

试试这个:

var signal = on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
    dojo.stopEvent(evt);
    signal.remove();
    global_welcome.hide();   
}); 

你添加了一个console.log(这个)来确保它指向你想要的对象了吗?我想它说那些对象是空的。Firebug说动画序列中的某些淡出线是空的。非常感谢Craig!这解决了问题!
var signal = on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
    dojo.stopEvent(evt);
    signal.remove();
    global_welcome.hide();   
});