Ext.Msg.Confirm - 等待用户响应?

Ext.Msg.Confirm - wait for a user response?

我了解 Ext.Msg.Confirm 是异步的,如果您不提供回调将继续。

下面是我的代码 - 如果用户在编辑模式下尝试从当前屏幕导航,则会调用此代码。我将回调传递给该方法 - fn 是我的回调事件,但无论我如何对此进行编码,逻辑都会继续导航离开页面。有没有办法在用户在确认框中选择是或否之前停止传播?

这是确认代码:

 displaySaveConfirmation: function(fn) {
    var title = 'Do you want to Save?'
    var msg = 'You are currently Editing Standard Text.  Would you like to save your changes?'
    var box = Ext.Msg.confirm(title, msg, function(buttonId, value) {
        if (buttonId === 'no'){
            fn.call();
        } else {
            return false;
        }
        }, this );

    box.setZIndex(400);
    box.setCls('alert-box');

    var buttons = Ext.ComponentQuery.query('button', box);
    for (var i=0; i<buttons.length; i++) {
        if (buttons[i].getItemId()=="no")
            buttons[i].addCls('blackBtn');
        else if (buttons[i].getItemId()=="yes")
            buttons[i].addCls('blueBtn');

        this.addReleaseEvent(box, buttons[i]);
    }
},

截至目前,您执行以下操作:

  • 事件被触发
  • 您打开消息框
  • 你的函数 returns,它没有 return "false"。
  • 浏览器在用户单击 "yes" 或 "no" 之前导航离开。

您要做的是:

  • 事件被触发
  • 您打开消息框
  • 您的函数 return 错误。
  • 浏览器没有离开。
  • 用户点击"yes"或"no"。
  • 如果答案是 "yes",您手动导航到之前请求的目标页面(例如关闭浏览器 window,使用 history.back() 或类似的)。

或者,如果启动和 运行(并测试了所有可能的情况下如何导航和如何找到目标)的工作量太大,您可以选择 window.alert 对话框,它看起来不太好,但可以同步工作。

或者你可以像我一样做:我只是 returned false 在调出一个 MessageBox 之后,上面写着:"You cannot leave the page during edit. Please save or abort the post."