Ext JS 4.1 - окно не отображается после скрытия

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

Вот что я пробовал до сих пор:


isCapsLock Вспомогательная функция для обработки включения/выключения Caps Lock:

function(e) {

    e = (e) ? e : window.event;

    var charCode = false;
    if (e.which) {
        charCode = e.which;
    } else if (e.keyCode) {
        charCode = e.keyCode;
    }

    var shifton = false;
    if (e.shiftKey) {
        shifton = e.shiftKey;
    } else if (e.modifiers) {
        shifton = !!(e.modifiers & 4);
    }

    if (charCode >= 97 && charCode <= 122 && shifton) {
        return true;
    }

    if (charCode >= 65 && charCode <= 90 && !shifton) {
        return true;
    }

    return false;

}


Ext.define('MyApp.controller.LoginController', {
    extend      : 'Ext.app.Controller',
    views       : [ 'notification.CapsLockNotification' ],
    refs            : [{
       ref      : 'capsLockNotification',
       selector: 'capslocknotification'
    }],
    init        : function() {
             this.capsLockNotification = Ext.widget('capslocknotification');
             this.control({
                  'loginform #password' : {
                      keypress    : this.handleCapsLock
                   }
                 // control logic goes here
             });
    },
    handleCapsLock : function(field, eOpts) {
        var win = this.getCapsLockNotification();
        if(ExtUtil.isCapsLock(eOpts)) {
            win.show();
        } else {
            win.hide();
        }
    }
});

person talha06    schedule 22.10.2012    source источник
comment
Можете ли вы показать мне свою функцию getCapsLockNotification()? Кроме того, он показывает вам предупреждение? Мне будет легче отследить ошибку (если она есть), если вы отлаживаете ее, скажем, с помощью firebug   -  person Carlos Valenzuela    schedule 22.10.2012
comment
он генерируется Ext с использованием ссылок.. (обновлен первый пост; добавлены ссылки)   -  person talha06    schedule 22.10.2012
comment
Откуда взялся ExtUtil.isCapsLock? Также как вы вызываете handleCapsLock? Если ваша функция правильно скрывает окно, можете ли вы проверить, что win.show(); когда-либо попадал.   -  person Jamie Sutherland    schedule 22.10.2012
comment
это функция, которая включает/выключает блокировку заглавных букв. Я тоже добавил в первый пост.   -  person talha06    schedule 23.10.2012
comment
Вы не упомянули, как называется handleCapsLock. Это очень важно, так как вы оцениваете window скрытие/показ на основе переданных eOpts. Что такое eOpts? Есть ли какие-либо дополнительные параметры, которые вы передаете в eOpts помимо стандартных. Нам нужно это знать. Кроме того, нам также необходимо знать, как ExtUtil.isCapsLock() обрабатывать исключительные случаи. Это работает идеально?   -  person Varun Achar    schedule 23.10.2012
comment
ExtUtil.isCapsLock() работает правильно, я понял по логам консоли. Хорошо, я также добавил логику управления функцией handleCapsLock.   -  person talha06    schedule 23.10.2012


Ответы (1)


Проверьте, возвращает ли селектор правильный компонент. Сделайте переменную win глобальной: handleCapsLock : function(field, eOpts) { win = this.getCapsLockNotification(); if(ExtUtil.isCapsLock(eOpts)) { win.show(); } еще { win.hide(); } } И откройте консоль firebug в firefox или консоль инструментов разработчика в Chrome (обе с помощью CTRL + SHIFT + J) напишите в консоли: console.info(win); console.info(выигрыш.$имя_класса); проверьте, не являются ли они undefined или null и правильно ли указано имя класса

person chepike    schedule 12.11.2012