Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Блокировка кнопок браузера "Вперед/Назад" (хак для Ext JS) (https://javascript.ru/forum/extjs/56255-blokirovka-knopok-brauzera-vpered-nazad-khak-dlya-ext-js.html)

khusamov 06.06.2015 20:49

Блокировка кнопок браузера "Вперед/Назад" (хак для 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;
	}
	
});

khusamov 10.06.2015 15:36

Возможно есть лучше вариант? А то при этом варианте картинка дергается (переходит на назад к примеру и быстро обратно - это все-таки глазу заметно, плюс если на смену hash подвязан какой-то мегаобработчик вида - например создание вида, загрузка в него данных... то из-за этого дергание становится заметнее, да и вообще, ничего не хотелось бы грузить лишнего)

siber-biber 12.06.2015 22:00

Нет красивого кроссбраузерного варианта для этого. Вообще нужно не отказываться от кнопок вперед/назад, а строить приложение с учетом их функциональности (всетаки это браузер).
ExtJS поддерживает routes вот и юзайте их.

Типа такого:
#users/edit/:id - показывает модальное окно редактирования юзера
#users - показывает список пользователей

При попытке уйти с модального окна если форма dirty показывать предупреждение..

khusamov 12.06.2015 23:20

У меня как раз приложение с использованием routes. И когда пытаешься уйти с модального окна происходит не очень приятная картина: окно остается конечно же на месте, зато на фоне видно, что все начинает меняться. Поэтому я решил запретить вообще уходить с модального окна. И что мне с того, что будет предупреждение? Все равно на фоне будут происходить не желательные действия.


Часовой пояс GMT +3, время: 07:22.