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

时间:2015-12-11 00:33:11

标签: extjs sencha-touch

我知道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]);
    }
},

1 个答案:

答案 0 :(得分:0)

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

  • 事件被解雇
  • 您打开MessageBox
  • 您的函数返回,并且它不会返回&#34; false&#34;。
  • 浏览器在用户点击&#34;是&#34;之前导航。或&#34;不&#34;。

您想要做的是以下内容:

  • 事件被解雇
  • 您打开MessageBox
  • 您的函数返回false。
  • 浏览器无法离开。
  • 用户点击&#34;是&#34;或&#34;不&#34;。
  • 如果答案是&#34;是&#34;,您可以手动导航到之前请求的目标页面(例如,关闭浏览器窗口,使用history.back()或类似内容)。

或者,如果要完成并运行(并经过测试,所有可能情况下如何导航以及如何查找目标)的工作太多,您可以选择window.alert对话框,看起来不太好,但同步工作。

或者你可以像我一样做:我只是在提出一个MessageBox后返回false:&#34;你不能在编辑期间离开页面。请保存或中止帖子。&#34;