Почему мой второй Ext.Msg закрывается сразу после первого? - PullRequest
3 голосов
/ 14 августа 2011

Во-первых, вот мой код:

Ext.Msg.show({
    title: 'Username',
    msg: 'Please enter your username',
    buttons: Ext.MessageBox.OKCANCEL,
    prompt:{ maxlength : 180, autocapitalize : false },
    modal: true,
    fn: function(buttonId, text) {
        console.log("OK ("+text+"), what is you password?");
        if (buttonId == 'ok')
        {
            Ext.Msg.show({
                title: 'Password',
                msg: 'Please enter your password',
                buttons: Ext.MessageBox.OKCANCEL,
                prompt:{ maxlength : 180, autocapitalize : false },
                modal: true,
                fn: function(buttonId2, text2) {
                    if (buttonId == 'ok')
                    {
                        console.log("OK ("+text+", "+text2+"), attempting login..");
                    }
                },
                icon: Ext.MessageBox.INFO
            });
        }
    },
    icon: Ext.MessageBox.INFO
});

Моя проблема в том, что когда я нажимаю OK в первом окне сообщений, второе появляется менее секунды, а затем закрывается, и я не нажимаю OKво втором окне сообщения.

В идеале, конечно, я бы отображал ввод имени пользователя и пароля в одном и том же окне сообщений, но не могу понять, как это сделать.

Вся помощьоценили!

1 Ответ

11 голосов
/ 14 августа 2011

Статический метод show в Ext.Msg, который вы вызываете, в основном переконфигурирует предыдущий MessageBox и поэтому запутывается при скрытии и повторном отображении.

Вам следует создать новый экземпляр класса Ext.MessageBox ивызовите метод show этого объекта, чтобы он использовал независимые экземпляры.

var msg = new Ext.MessageBox().show({
    title: 'Username',
    msg: 'Please enter your username',
    buttons: Ext.MessageBox.OKCANCEL,
    prompt:{ maxlength : 180, autocapitalize : false },
    modal: true,
    fn: function(buttonId, text) {
        console.log("OK ("+text+"), what is you password?");
        if (buttonId == 'ok')
        {
            var msg2 = new Ext.MessageBox().show({
                title: 'Password',
                msg: 'Please enter your password',
                buttons: Ext.MessageBox.OKCANCEL,
                prompt:{ maxlength : 180, autocapitalize : false },
                modal: true,
                fn: function(buttonId2, text2) {
                    if (buttonId == 'ok')
                    {
                        console.log("OK ("+text+", "+text2+"), attempting login..");
                    }
                },
                icon: Ext.MessageBox.INFO
            });
        }
    },
    icon: Ext.MessageBox.INFO
});

Хотя это работает, я бы порекомендовал вам создать панель пользовательских форм, содержащую оба поля, и таким образом собирать информацию.

Надеюсь, это поможет.Стюарт

...