使用GWT历史而不是EventBus是否会受到惩罚

时间:2011-04-05 11:30:24

标签: gwt web-applications gwt-history

我正在筹划我的GWT应用。正如Ray Ryan在Google IO 09上所说:

  

“让你的历史记录正确,尽早把它弄清楚”。

我已经考虑过历史在我的应用程序中的作用,并且在第一印象中我似乎可以通过历史记录来处理我的所有控制流。控制流程只涉及单个索引值的规范(例如123):所以我可以将其表示为“i_123”历史记录令牌:UI中的多个组件将在新的历史记录中触发 - 触发UI更新。我的记录显示Presenter只会监听以“i_”开头的历史事件,然后从匹配的标记中提取索引,然后更新。

此策略是否会受到惩罚?如果我需要在应用程序周围传递复杂的消息,我很欣赏我会把它们包装成事件,但它似乎没有必要。

有关此策略的其他意见吗?

1 个答案:

答案 0 :(得分:4)

最好将历史记录用于您希望用户能够使用浏览器的后退和前进按钮来回导航的所有内容。在单个记录之间移动似乎是一个很好的例子 - 您可能希望让他们探索三个记录,然后向后移动它们。

但这对某些活动来说还不够。说一些数据更改,并且您希望所有各种显示都自行更新 - 即使您仍在查看i_123。此时,您可能希望通过事件总线发送类似RefreshEvent(您创建的)的内容。

幸运的是,您可以使用您正在收听历史事件的完全相同的事件总线来收听您决定稍后添加的事件!因此,当您刚开始时,我建议*监听历史事件,作为程序内通信的一种方式,然后根据需要添加更多事件。只需确保您没有开始使用与导航无关的事物的历史记录。

* PS:GWT的ActivityPlace类是为了在历史记录和代码之间提供一层灵活性而构建的,并且具有一些很好的好处,例如集中式URL映射/解析(所以你不要当你想改变网址方案时,我必须四处改变每一位主持人)并自动“你真的想离开吗?”确认。如果您在开始之前有时间,我建议您从一开始就使用ActivityPlace,而不是直接收听历史事件。