Как управлять состоянием в приложении и URL? - PullRequest
3 голосов
/ 19 декабря 2011

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

Я использую jQuery-BBQ для управления хэшем URL, и у меня есть обработчик hashchange, который соответствующим образом меняет вещи при изменении URL (например, нажимает кнопку браузера назад / вперед).Тем не менее, все изменилось соответственно, и в итоге я изменил хеш, запустив обработчик hashchange и получив цикл.

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

Существует ли шаблон проектирования, который изящно обрабатывает этот вид сценария управления состояниями?

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Я не могу рекомендовать вам какой-либо конкретный шаблон проектирования для реализации прямо сейчас, но я могу предложить вам взглянуть на функции pushSate () и popState () html5.Эти функции способны хранить состояния, а также данные, которые связаны с этими состояниями.github.com использует эту технику для просмотра каталогов определенного публичного хранилища.Вот краткое руководство: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history. Надеюсь, это поможет.

0 голосов
/ 21 декабря 2011

То, что я в итоге сделал, - это строгое предоставление в моей программе только одного места, в котором можно изменить состояние, и маршрутизацию всех изменений состояния через это одно место.

под 'одним местом', я имею в виду одну группу общедоступных функций, чья работа включает в себя:

  1. проверка запрашиваемого изменения состояния
  2. проверка нового запрошенного изменения состояния отличается от текущего состояния
  3. обновление состояния приложения
  4. обновление состояния браузера

шаг 2, пожалуй, самый важный - он гарантирует, что независимо от того, поступает ли запрос на изменение состояния из приложения или из браузера, повторных попыток изменить состояние в приложении или браузере после первоначального изменения не будет. .

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

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