【问题标题】:Extjs confirm box callback handlingExtjs 确认框回调处理
【发布时间】:2014-03-06 10:53:48
【问题描述】:

在我的 ExtJs 代码中,我正在检查警告标志的值。

如果设置了标志,我想向用户显示一个确认 (OKCANCEL) 框,我会在其中询问用户是否要继续,即使有警告。

现在就像任何确认框一样,如果用户单击“确定”,代码应该按顺序执行下一个命令,如果他单击“取消”,代码应该返回。

以下是我的代码:

if(warning){
    Ext.MessageBox.show({
        title: 'Icon Support',
        msg: 'Are you sure you want to proceed?',
        buttons: Ext.MessageBox.OKCANCEL,
        icon: Ext.MessageBox.WARNING,
        fn: function(btn){
            if(btn == 'ok'){
            // go to the alert statement below.
            } else {
                return;
            }
        }
    );

    alert('wants to proceed ahead'); //if user clicks OK then come here
} 

现在我面临的问题是当代码进入if 块时,它会显示消息框,然后它会提醒wants to proceed ahead

我可以通过在 alert() 之前添加 return; 语句来阻止这种情况发生。

但是当用户点击确定按钮后,我该如何进入alert语句呢?

【问题讨论】:

    标签: javascript extjs callback


    【解决方案1】:

    回调是事件驱动的架构,而 JavaScript 是解释型编程语言。

    所以最好的方法是

    function SomeFunc(){
    //some code 
    }
    if(warning){
        Ext.MessageBox.show({
            title: 'Icon Support',
            msg: 'Are you sure you want to proceed?',
            buttons: Ext.MessageBox.OKCANCEL,
            icon: Ext.MessageBox.WARNING,
            fn: function(btn){
                if(btn == 'ok'){
                SomeFunc();
                } else {
                    return;
                }
            }
        });
    } 
    

    【讨论】:

    • 我知道这是可能的。但我可以避免这样做吗?假设此确认是现有代码中的新功能/检查,我只想将其插入现有流程中。只需检查用户是否同意警告,然后像之前一样继续,否则返回。没有新的功能创建。这可能吗?
    • @DarkKnightFan 你可以创建无限循环,如果它会检查一些 bool 变量,只有在单击 OK 按钮后才会变为 true
    • 嗯...听起来(感觉)不太好:(这种方法可能会危及现有的工作代码
    • 在这种情况下真正避免使用回调的唯一方法是使用 real JavaScript 确认。 JS 中的库存确认是blocking,所以它会停止执行其他脚本,直到用户单击yes 或no。 Ext JS 确认是非阻塞的(他们在文档中说了这么多),因此您的代码将在用户单击“是”或“否”之前完成执行之后发生的任何事情。
    • @DarkKnightFan 你无法避免。消息框的打开是异步的。与在 Javascript 中使用异步处理的所有事物一样,您无法绕过创建稍后调用的闭包。你不能改变 Javascript 的工作方式。
    【解决方案2】:

    需要注意的是,我认为您的警报可能只是您希望用作实际代码处理的占位符的代码示例。

    但万一它是更多代码的第一行,一个普通的警报将阻止浏览器的处理并从当前窗口中移除焦点。

    http://www.w3schools.com/jsref/met_win_alert.asp

    我同意 Sergey 的回复,只需要重新安排代码以正确获取回调函数,现在需要在“Ok”上继续处理消息。我考虑过循环,但这并不安全。

    【讨论】:

    • 使用console.log()代替alert(),它是非侵入式的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多