代码之家  ›  专栏  ›  技术社区  ›  Epaga Alex Reynolds

使用GWT历史来传递参数?

  •  10
  • Epaga Alex Reynolds  · 技术社区  · 15 年前

    我有一个叫做“订单”的页面和一个叫做“订单详情”的页面。如《卓越》所述 MVP tutorial 我正在处理历史记录(与中央值更改侦听器)和“事件总线”处理程序管理器。

    我注册了一个事件处理程序,某人单击一个订单,它基本上创建了orderdetailpresenter,传递了订单ID(包含在showorderdetailent中),然后调用 History.newItem("orderDetails") .

    这有两个主要缺点:这个新创建的历史步骤不知道传入了哪个订单ID。例如,如果有人在“订单详情”页面上加书签(或返回,然后在浏览器中前进),他们将得到一个没有订单详情的空页面。

    所以我的问题是:我应该做一些像 History.newItem("orderDetails?id="+id) ,然后在我的值更改侦听器中分析历史标记?如果是这样,是否有一个最佳实践、一个API或库可以用这种方式将参数解析和格式化为字符串?

    1 回复  |  直到 15 年前
        1
  •  9
  •   Daniel Martin    15 年前

    是的,那是你应该做的。据我所知,没有图书馆可以让这变得更容易。

    不过,还有一点建议:如果可能的话,您应该避免使用一个方案,该方案要求您在历史项目字符串中使用百分比转义。原因是什么 location.hash 返回时间 location.href 结束,说 #%3C@%40 因浏览器而异。例如,chrome返回 α%3C@ % 40 ;firefox返回 #<@@ . 设置 位置散列 具有类似的浏览器特定效果。

    GWT的历史令牌机制依赖于 位置散列 并且不会规范化浏览器行为中的这种差异。最终的结果是,如果您使用需要百分比转义的内容,您将获得无法在浏览器间共享的URL—如果您希望在其他页面上生成跳转到GWT应用程序中特定位置的链接,或者希望用户在GWT应用程序中共享链接的URL,则这是一个问题。(或者,当你的用户安装Chrome时,从Firefox中导入他们的书签,这些书签指向你的webapp中的特定位置,突然这些书签就不能像以前那样工作了)

    对于偏执狂,我会避免 ? , # , & , % , < > 历史标记字符串中的字符。但是,字符串 orderDetails/oid=12313378 应该没问题,而且跨浏览器。

    (编辑以澄清我要讨论的问题是,在多个不同的浏览器中使用相同的URL,而不是在每个不同的浏览器中使用历史标记方法)

    推荐文章