【问题标题】:Dojo Dialog onEnd() animation exceptionDojo Dialog onEnd() 动画异常
【发布时间】:2012-09-22 15:31:09
【问题描述】:

我在动画序列中遇到了 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);

此错误的先前答案但使用destroyRecursive 而不是hide 表明它与在动画完成之前被销毁的对话框有关。我尝试使用 dojo.hitch() 和 setTimeOut 但这似乎不起作用。另外令人费解的是,我第一次使用 global_welcome.show() (由另一个按钮调用)打开此对话框,然后按取消按钮,它可以正常工作。第二次和之后,它会产生上述错误消息。此外,右上角的 dojo 对话框的默认关闭按钮永远不会导致此错误。也许我可以让 onShow 调用关闭按钮调用的方法?

有人可以帮帮我吗?提前致谢!

【问题讨论】:

  • 您是否添加了一个 console.log(this) 以确保它指向您期望的对象?
  • 我认为这些对象是空的。 Firebug 说动画序列中用于淡出的某些行是空的。

标签: animation dialog hide dojo


【解决方案1】:

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

试试这个:

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

【讨论】:

  • 非常感谢克雷格!这解决了问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多