Управляйте историей браузера вручную для одной части моего приложения Rails 5 с поддержкой Turbolinks - PullRequest
0 голосов
/ 06 ноября 2018

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

  1. Пользователь загружает страницу товара
  2. Пользователь нажимает на продукт, и появляется модальный продукт (без перезагрузки страницы)
  3. После загрузки модели продукта URL обновляется до URL загруженного продукта
  4. Пользователь нажимает "назад"
  5. Модель исчезает, и пользователь возвращается на страницу продукта , но страница продукта не перезагружается

Если я вручную history.pushState(null, null, PRODUCT_URL) после того, как пользователь нажимает на шаге (2), то все работает, кроме шага (5), во время которого Turbolinks перезагружает всю страницу продукта.

В идеале я мог бы подключиться к событию window popstate и отменить запрос Turbokink ajax, но в соответствии с документами Turbolinks «Восстановительные визиты не могут быть отменены и не запускаются turbolinks:before-visit»

1 Ответ

0 голосов
/ 14 ноября 2018

При переходе в историю Turbolinks добавляет свои собственные данные к state (то есть к первому аргументу history.pushState. Затем он использует эти данные в событии popstate для восстановления страницы.

Чтобы вручную перейти к истории в формате, понятном Turbolinks, вместо непосредственного вызова history.pushState, вы можете добиться определенного успеха, используя следующее на шаге 2:

Turbolinks
  .controller
  .pushHistoryWithLocationAndRestorationIdentifier(PRODUCT_URL, Turbolinks.uuid())

Стоит отметить, что, хотя это публичный метод, он не документирован и поэтому может быть удален в будущих версиях. Однако, учитывая, что Turbolinks довольно стабилен, его использование должно быть достаточно безопасным.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...