2011-12-27 2 views
1

Я создаю клиент HTML и Javascript для работы в браузере, который ведет переговоры с REST API. Я использую RouteMap для установки своих URL-адресов. Таким образом, я держал конвенции что-то вроде этогоHashchange не срабатывает, когда пользователь нажимает на ту же ссылку

http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/ 

я настроил только один маршрут, и я захватывая эти параметры в функции ограничены в hashchange. Большинство из них прекрасно работает. Просто два вопроса, и я застрял из-за них.

  1. Если пользователь дважды нажимает на эту же ссылку, событие hashchange не срабатывает. Да, хэш не изменился, поэтому очевидно, что он не срабатывает. Но должно быть что-то, что можно сделать, и мне это не хватает.
  2. Если я что-то изменил в пользовательском интерфейсе (например, принесите новые divs и скройте некоторые), для которых я не хочу менять хеш-ссылку, я теряю эту историю и не могу вернуться назад, щелкнув по кнопке «Назад» правильно.

Любая помощь будет очень благодарна.

ответ

1

Для # 1 вы, вероятно, хотите присоединить обработчик к событию клика по ссылке. Таким образом, вы можете узнать, нажата ли ссылка. Когда я использую onhashchange, я всегда прикрепляю что-то к событию click, чтобы помочь polyfills для onhashchange, поэтому, по крайней мере, я могу сказать, когда он терпит неудачу.

Для # 2, я хочу указать, что с автоматическим изменением материала история пользователя проблематична. Вы могли бы заполнить чью-то историю минутными, бессмысленными изменениями хэша. Я рекомендую только изменять историю, когда пользователь фактически взаимодействует. Кроме того, HTML5 предлагает pushState и popState. Reference