Используя Историю GWT для передачи параметров?

У меня есть страница под названием Заказы и страница под названием OrderDetails. Как описано в превосходном учебном руководстве MVP я работаю с Историей (с центральным ValueChangeListener) и "шина события" HandlerManager.

Мне зарегистрировали обработчик для события, что кто-то нажимает на порядок, который в основном создает OrderDetailPresenter, передачи в ID заказа (который содержится в ShowOrderDetailEvent), и затем звонит History.newItem("orderDetails").

Это имеет пару главных недостатков: Этот недавно созданный шаг Истории НЕ знает, в котором был передан ID заказа. Так, например, если кто-то отметит страницу подробных сведений о заказе (или продвинется тогда в их браузере), то они получат пустую страницу без подробных сведений о заказе.

Таким образом, мой вопрос: Если я вместо этого делаю что-то как History.newItem("orderDetails?id="+id), и затем проанализируйте маркер истории в моем слушателе изменения значения? Если так, есть ли лучшая практика, API или библиотека для парсинга и форматирования аргументов в строку таким образом?

10
задан kapand 22 November 2012 в 15:01
поделиться

1 ответ

Да, это то, что вы должны сделать. Насколько я знаю, не существует библиотеки для облегчения этой задачи.

Небольшой совет: если это возможно, избегайте использования схемы, которая требует использования процентных символов в строке элемента истории. Причина в том, что то, что возвращает location.hash, когда location.href заканчивается, скажем, на #%3C@%40, варьируется от браузера к браузеру. Например, Chrome возвращает #%3C@%40; Firefox возвращает #<@@. Установка location.hash может иметь аналогичные эффекты, зависящие от браузера.

Механизм маркеров истории в GWT полагается на location.hash и не нормализует эту разницу в поведении браузеров. В итоге, если вы используете что-то, что требует процентных экранов, вы получите URL, которые не могут быть использованы в разных браузерах - это проблема, если на какой-то другой странице вы хотите генерировать ссылки, которые переходят к определенному месту в вашем приложении GWT, или если вы ожидаете, что пользователи будут делиться URL, которые ссылаются на ваше приложение GWT. (или когда ваш пользователь устанавливает Chrome, импортирует свои закладки из Firefox, которые указывали на определенные места в вашем веб-приложении, и вдруг закладки перестают работать как раньше)

Для паранойи я бы избегал ставить любые ? , #, &, %, < или > символов в строке маркера истории. Однако строки типа orderDetails/oid=12313378 должны быть нормальными и кроссбраузерными.

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

.
9
ответ дан 4 December 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: