如何在 Ext.Msg.alert 的 "OK" 上触发点击事件?

How to fire an click event on the "OK" of Ext.Msg.alert?

成功保存表单后,将触发警报,如下所示:

Ext.Msg.alert('Success','Changes saved successfully');

如何通过 javascriptextjs 在 "OK" 上触发 click event

参考Programmatically call handler of a button event?,下面是有效的,但是找出由extjs生成的button-id看起来不是个好主意。

var btn = Ext.getCmp('button-id');
var e = null; // we don't have any event, so let's use nothing
Ext.callback(btn.handler, btn.scope, [btn, e], 0, btn);

下面是捕获确定按钮点击事件的代码:

Ext.Msg.alert('Name', 'Please enter your name:', function(btn, text){
    if (btn == 'ok'){
        console.log("OK clicked");
        // you code here
    }
});

这是工作演示:https://codepen.io/anon/pen/BVojEX?editors=0010

您可以从 Ext.Msg(或您正在使用的消息框的任何 none-单例实例)向下查看组件层次结构。在 ExtJS 6 经典中,要走的路是:

Ext.Msg.down('button[itemId=ok]').click();

我做了一个小 fiddle 显示 the working solution

首先,只要你将显示 Ext.Msg.alert() 存储在这样的变量中

var msg = Ext.Msg.alert('Success', 'Changes save successfully')

然后在你可以使用 msg.down('#ok') 获得确定按钮后,这将 return OK 按钮。按钮具有 fireHandler() 的方法,因此您可以使用它以编程方式调用处理程序。

在此Fiddle中,我创建了一个演示。

注意 我已经使用 Ext.defer 函数在 3 秒后触发处理程序。您可以根据需要随时更改。

代码片段

Ext.application({
    name: 'Fiddle',

    launch: function () {
        var msg = Ext.Msg.alert('Success', 'Changes save successfully', function (btn) {
            if (btn == "ok") {
                console.log(btn);
            }
        });

        //Defer is just only for demo
        //You can put your logic based on requirement
        //I am just giving example of how to fire the event
        Ext.defer(function () {
            var buttonOk = msg.down('#ok')
            buttonOk.fireHandler(buttonOk);
        }, 3000);

    }
});