Блокировка кнопок браузера "Вперед/Назад" (хак для Ext JS)
На ваш суд представляю хак для блокировки кнопок браузера "Вперед/Назад", когда на экране открыто модальное окно.
Ext.define("Override.window.Window", { override: "Ext.window.Window", onShow: function() { var me = this; me.callParent(arguments); if (me.modal) Ext.util.History.disable(); }, onHide: function() { var me = this; me.callParent(arguments); if (me.modal) Ext.util.History.enable(); } }); Ext.define("Override.util.History", { override: "Ext.util.History", enabled: true, enable: function() { var me = this; if (!me.enabled) { me.enabled = true; me.un("change", "fixhash", me); } }, disable: function() { var me = this; if (me.enabled) { me.enabled = false; me.fixedhash = window.location.hash; me.on("change", "fixhash", me); } }, fixhash: function(token) { window.location.hash = this.fixedhash; } }); |
Возможно есть лучше вариант? А то при этом варианте картинка дергается (переходит на назад к примеру и быстро обратно - это все-таки глазу заметно, плюс если на смену hash подвязан какой-то мегаобработчик вида - например создание вида, загрузка в него данных... то из-за этого дергание становится заметнее, да и вообще, ничего не хотелось бы грузить лишнего)
|
Нет красивого кроссбраузерного варианта для этого. Вообще нужно не отказываться от кнопок вперед/назад, а строить приложение с учетом их функциональности (всетаки это браузер).
ExtJS поддерживает routes вот и юзайте их. Типа такого: #users/edit/:id - показывает модальное окно редактирования юзера #users - показывает список пользователей При попытке уйти с модального окна если форма dirty показывать предупреждение.. |
У меня как раз приложение с использованием routes. И когда пытаешься уйти с модального окна происходит не очень приятная картина: окно остается конечно же на месте, зато на фоне видно, что все начинает меняться. Поэтому я решил запретить вообще уходить с модального окна. И что мне с того, что будет предупреждение? Все равно на фоне будут происходить не желательные действия.
|
Часовой пояс GMT +3, время: 07:22. |