【问题标题】:Is there a penalty to using GWT history instead of EventBus使用 GWT 历史记录而不是 EventBus 是否会受到惩罚
【发布时间】:2011-04-05 11:30:24
【问题描述】:
我正在计划我的 GWT 应用程序。正如 Ray Ryan 在 Google IO 09 上所说:
“正确处理您的历史记录,并尽早正确处理”。
我已经考虑过历史在我的应用程序中的作用,在第一印象中,我似乎可以通过历史令牌处理我的所有控制流。控制流都只涉及单个索引值的规范(例如 123):因此我可以将其表示为“i_123”历史令牌:UI 中的多个组件将在新的历史令牌中触发 - 以触发 UI 更新。我的记录显示 Presenter 只会监听以“i_”开头的历史事件,然后从匹配的标记中提取索引并更新。
这个策略有惩罚吗?如果我需要在应用程序中传递复杂的消息,我很感激我会将这些消息包装到事件中,但这似乎没有必要。
对此策略还有其他意见吗?
【问题讨论】:
标签:
gwt
web-applications
gwt-history
【解决方案1】:
最好将历史记录用于您希望用户能够使用浏览器的后退和前进按钮来回导航的所有内容。在单个记录之间移动似乎是一个很好的示例 - 您可能希望让它们浏览三个记录,然后向后移动它们。
不过,这对于某些事件来说是不够的。假设有一些数据更改,并且您希望所有各种显示都自行更新 - 即使您仍在查看i_123。此时,您可能希望通过您的事件总线发送类似RefreshEvent(您将创建)的内容。
幸运的是,您可以使用与您正在监听历史事件完全相同的事件总线来监听您决定稍后添加的事件!所以,当你刚开始的时候,我建议*监听历史事件作为程序内通信的一种方式,然后根据需要添加更多事件。只要确保您没有开始将历史记录用于与导航无关的事情。
*PS:GWT 的 Activity 和 Place 类的构建是为了在您的历史记录和代码之间提供一层灵活性,并且具有一些很大的好处,例如集中式 URL 映射/解析(因此您不必去当您想更改 url 方案时,围绕更改每个演示者)和自动“您真的想离开吗?”确认。如果您在真正开始之前有时间,我建议您从一开始就使用Activity 和Place,而不是直接收听历史事件。