Блокировка кнопок браузера "Вперед/Назад" (хак для 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, время: 05:55. |