Показать сообщение отдельно
  #17 (permalink)  
Старый 21.05.2015, 23:36
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

Ну как откуда узнал, на практике изучил. ;) Когда два года назад на меня повесили разработку Accessibility, фреймворк пришлось изрядно отрефакторить, чтобы управление фокусом и клавиатурная навигация вообще заработали.

Про "принципы работы" часто люди спрашивают, но сам вопрос мне не очень понятен. Фреймворк сделан для того, чтобы вы могли его использовать и получать (более/менее) одинаково работающие приложения во всех браузерах, которые мы поддерживаем. Есть API документация, есть tutorials, есть курсы. Изучайте и используйте. ;) Зачем вам знание каких-то глубинных вещей? Обычно оно ничем не помогает, только грузит ненужными деталями. Хотя мне и не жалко никогда, так что если есть конкретные вопросы, то спрашивайте. ;)

Асинхронные это и значит, что асинхронные: события выстреливают не в том же цикле исполнения, что и собственно момент фокусирования.

Возьмём вот такой код, для примера:

Код:
Ext.onReady(function() {
    var btn = new Ext.button.Button({
        renderTo: document.body,
        text: 'bork!',
        listeners: {
            element: 'el',
            focus: function() {
                console.log('bork focused!');
            }
        }
    });
    
    setTimeout(function() {
        console.log('pre');
        btn.focus();
        console.log('post');
    }, 100);
});
В Chrome/Safari/Firefox/whatever консоль будет выглядеть так:

Код:
pre
bork focused!
post
В IE8-11 консоль будет выглядеть вот так:

Код:
pre
post
bork focused!
Вот конкретно за эту фигню я ненавижу Microsoft отдельно. Асинхронность фокусных событий это очень, очень больно для фреймворков. :(
Ответить с цитированием