如何自动化 'yes' 点击 Ext.MessageBox.confirm 按钮(Ext JS 6.0 版)?

How to automate 'yes' click for Ext.MessageBox.confirm button ( Ext JS version 6.0)?

Ext.MessageBox.confirm('Confirm', 'Do you like Ext JS?', function (button) {

            if (myCounter !== 0) {

                // auto click 'Yes' button

            } else if (button === 'yes') {

                    //do somethhing

                }
            })

我无法change/add代码块的函数,这是当前代码块。

请告诉我如何在 UI 上显示弹出窗口时自动点击 'yes',当 myCounter!==0

else if 块用于手动单击按钮。

不确定您想要自动点击的目的是什么 "Yes" 但这里有修改它的代码,因此您可以在显示或不显示确认对话框方面有更多选择。

let myCounter = 0;

    let showDialog = function () {
        console.log('showDialog:' + myCounter);
        if (myCounter > 0) {
            myCounter++; // Counter incremented due to defaulting to yes click
            console.log('myCounter != 0: ' + myCounter);
            return false;
        } else {
            displayDialog();
        }
    }

    function displayDialog () {
        console.log('displayDialog: ' + myCounter);
        Ext.Msg.confirm('Confirm', 'Do you like Ext JS?', function (button) {
            if (button === 'yes') {
                myCounter++; // If yes, increment counter
            } else {
                myCounter--; // Decrement counter if answer no
                console.log('no answer: ' + myCounter);
            }
        });
    }

    let btn = Ext.create({
        xtype: 'button',
        text: 'Show Dialog',
        renderTo: Ext.getBody(),
        width: 200,
        height: 50,
        handler: showDialog
    });

    // Ext.Viewport.add(btn);
    btn.show();

只是显示确认信息,然后试图将其隐藏起来无法验证您的代码是否正常工作。这就是为什么在 fiddle 我在视图中添加了一个按钮来演示代码如何显示对话框并阻止它显示的原因。

使用您显示的代码,该函数是对话框上按钮单击的处理程序,它永远不会阻止它显示。显示对话框,代码等待用户单击,然后在您定义的处理函数中运行代码。

这是另一个 fiddle 可以更好地展示另一种实现您所要求的方法的方法。

myCounter = 0;

    function showDialog () {
        if (myCounter != 0) {
            console.log('Do NOT show the dialog');
        } else {
            Ext.Msg.show({
                title: 'Confirm',
                msg: '<p>Do you like Ext JS?',
                icon: Ext.Msg.QUESTION,
                buttons: Ext.Msg.YESNO,
                fn: function (ans) {
                    if (ans === 'yes') {
                        myCounter++;
                    }
                }
            })
        }
    }

    let btn = Ext.create({
        xtype: 'button',
        text: 'Show Dialog',
        renderTo: Ext.getBody(),
        width: 200,
        height: 50,
        handler: showDialog
    });

    // Ext.Viewport.add(btn);
    btn.show();
    showDialog();

上面使用自定义消息框,将其样式设置为默认确认。显示确认信息,用户回答是或否。添加了一个按钮,以便您可以在选择 "No" 时重新打开确认对话框。一旦用户回答 "Yes" 对话框将不再显示。

没有直接的方法我知道 "auto-click" 是按钮,因为在单击按钮之前,任何按钮上的处理函数都不会触发。这两个是我建议的处理方式,因此它会像您期望的那样工作。