вопросы по истории и выбору модели

Я пытаюсь создать приложение, используя Extjs 4.1. В общем: это окно просмотра с панелью дерева на западе и центральной панелью, которая на самом деле является панелью держателя вкладок. Когда пользователь щелкает узел дерева, центральное представление заполняется вкладкой. Я установил атрибут на панели дерева, чтобы после выбора узла он отменялся (deselectAll). Причина этого в том, что пользователь может открывать множество вкладок из разных мест (например, внутри каждой вкладки). Но когда я устанавливаю вышеуказанный атрибут, возникает ошибка («данные» не определены). Неопределенные данные — это данные, относящиеся к узлу дерева. Итак, вопрос по выбору модели:

Как я могу решить эту проблему (решение может состоять в том, чтобы выбрать первый узел, но я этого не хочу)?

Что касается утилиты истории, мне нужно реализовать кнопку возврата в браузере. Особенно я хочу отключить кнопку обновления браузера. Если пользователь откроет, скажем, 15 вкладок и случайно нажмет на обновление браузера или «F5», он потеряет все. Я пробовал много вещей, но безуспешно. Я не могу понять «Ext history util». Так,

Есть ли хороший пример?

Может ли кто-нибудь подсказать мне, как это сделать?

Обратите внимание, что приложение построено с учетом новой архитектуры «MVC».


person Community    schedule 29.05.2012    source источник


Ответы (1)


Остановить событие обновления довольно просто — при условии, что ваша страница находится в фокусе. Например.:

Ext.getDoc().on('keypress', function(event) {
    if (event.getCharCode() == event.F5) {
        event.stopEvent();
        console.log('you stopped the refresh event');
    }
});

Если ваша страница не имеет фокуса, то ничего нельзя сделать, но большую часть времени ваша страница теряет фокус, когда открывается другая вкладка браузера, поэтому F5 все равно будет обновлять эту вкладку.

Я все еще пытаюсь осмыслить первую часть вашего вопроса, но я решил поделиться этим.

ИЗМЕНИТЬ

Вместо того, чтобы пытаться остановить поведение браузера по умолчанию (что вы можете сделать только в очень ограниченных случаях), вы должны изучить управление состоянием. ExtJS поддерживает его во многих компонентах. Вот пример ExtJS.

Также здесь приведен пример управление историей браузера.

person egerardus    schedule 29.05.2012
comment
Спасибо за ответ. Но что, если пользователь нажмет на значок браузера? - person ; 30.05.2012
comment
На самом деле с этим ничего нельзя поделать с точки зрения javascript. Веб-браузеры предназначены для предотвращения получения контроля над клиентским компьютером внешними сайтами. Существуют различные настройки браузера, которые можно применять на уровне предприятия, если это веб-приложение интрасети — вам нужно будет просмотреть параметры конфигурации вашего браузера, чтобы увидеть, как это можно сделать. Также см. мой отредактированный ответ на state management. Я думаю, что это более жизнеспособное решение вашей проблемы. - person egerardus; 31.05.2012
comment
Спасибо за ваш ответ. Я думаю, что государственное управление является правильным подходом. Я пробовал много вещей по управлению состоянием, но ничего не работает - person ; 31.05.2012