我正在构建一个Web应用程序,通过URL在内部管理状态,允许用户使用浏览器按钮以及站点的UI来操作状态。
我正在使用jQuery-BBQ来管理URL哈希,并且我在hashchange上有一个处理程序,当URL更改时(例如浏览器后退/前进按钮按下),它会相应地更改内容。然而,事情发生了相应的变化,我最终改变了哈希值,从而触发了哈希交换处理程序并导致了循环。
为了解决这些问题,我发现自己正在检查新状态是否与之前的状态相同,如果是这样的话就会失败。但我很快就得到了相当严格的代码,分别针对每个州的多个演员分别处理每个州。
是否有优雅处理此类状态管理方案的设计模式?
答案 0 :(得分:1)
我不能建议您立即实现任何特定的设计模式,但我可以建议您查看html5的pushSate()和popState()函数。这些函数能够存储状态以及与这些状态相关的数据。 github.com正在使用这种技术遍历某个公共存储库的目录。这是一个快速指南:https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history。希望这会有所帮助。
答案 1 :(得分:0)
我最终做的是严格要求在我的程序中只提供一个可以更改状态的位置,并将所有状态更改路由到该位置。
“一个地方”,我指的是一组可公开访问的职能,其职责包括:
步骤2可能是最重要的 - 它确保状态更改请求是来自应用程序内还是来自浏览器,不会有任何重复尝试在应用程序或浏览器中更改状态而不是初始更改
到目前为止,这似乎很好,这似乎在我的代码的一部分中封装了状态机的复杂性,使得更容易保持正确...仍然,我欢迎任何其他答案。我很肯定这是一个已经多次解决的问题。