Как запустить событие щелчка по OK Ext.Msg.alert?

После успешного сохранения формы срабатывает предупреждение, которое выглядит следующим образом:

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

введите здесь описание изображения

Как запустить click event на "ОК" через javascript или extjs?

Обратитесь к Программно вызвать обработчик события кнопки?, сработало следующее, однако поиск button-id, сгенерированного extjs, выглядит плохой идеей.

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);

person caot    schedule 01.06.2018    source источник
comment
В этой статье рассказывается о перехвате закрытия окна нажатием на значок X, но я уверен, что вы можете использовать это, чтобы сделать то же самое для кнопки OK (existdissolve.com/2011/08/extjs-4-intercepting-a-window-close)   -  person Ryan Wilson    schedule 01.06.2018
comment
Можете ли вы объяснить, что именно вам нужно?   -  person Narendra Jadhav    schedule 01.06.2018
comment
@N.Jadhav обновил вопрос.   -  person caot    schedule 01.06.2018


Ответы (3)


Вы можете спуститься по иерархии компонентов от Ext.Msg (или любого другого экземпляра окна сообщений, который вы используете). В ExtJS 6 classic путь будет таким:

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

Я сделал небольшую скрипту, которая показывает рабочее решение.

person Alexander    schedule 02.06.2018

Сначала всякий раз, когда вы будете показывать Ext.Msg.alert() сохранить в переменной, как это

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

Затем после того, как вы можете получить кнопку «ОК», используя msg.down('#ok'), это вернет кнопку 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);

    }
});
person Narendra Jadhav    schedule 02.06.2018
comment
Ответ Александра лучше, потому что ему не нужен var для его отслеживания. - person caot; 04.06.2018

Ниже приведен код для захвата события нажатия кнопки OK:

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

person Vikasdeep Singh    schedule 01.06.2018
comment
Код нельзя добавить в Ext.Msg.alert, так как он используется и в другом случае. - person caot; 01.06.2018
comment
@caot, что ты имеешь в виду? - person Vikasdeep Singh; 01.06.2018