10

OrdersというページとOrderDetailsというページがあります。優れたMVPチュートリアルで説明されているように、私はHistory(中央のValueChangeListenerを使用)と「イベントバス」HandlerManagerを使用しています。

誰かが注文をクリックするイベントに登録されたハンドラーがあります。これは基本的にOrderDetailPresenterを作成し、注文ID(ShowOrderDetailEventに含まれています)を渡してからを呼び出しますHistory.newItem("orderDetails")

これにはいくつかの大きな欠点があります。この新しく作成された履歴ステップは、渡された注文IDを認識しません。たとえば、誰かが注文の詳細ページをブックマークすると(またはブラウザで前に戻って)、空になります。注文の詳細がないページ。

だから私の質問は:代わりにのようなことをHistory.newItem("orderDetails?id="+id)してから、値変更リスナーで履歴トークンを解析する必要がありますか?もしそうなら、この方法で引数を解析して文字列にフォーマットするためのベストプラクティス、API、またはライブラリはありますか?

4

1 に答える 1

9

はい、それはあなたがすべきことです。私の知る限り、これを簡単にするためのライブラリはありません。

ただし、ちょっとしたアドバイス: 履歴項目の文字列でパーセント エスケープを使用する必要があるスキームは、可能な限り使用しないでください。その理由は、終了location.hash時に返されるものlocation.href、たとえば#%3C@%40ブラウザーごとに異なるためです。たとえば、Chrome は#%3C@%40;を返します。Firefox は を返します#<@@。設定location.hashにより、ブラウザ固有の同様の効果が得られます。

GWT の History トークン メカニズムは、ブラウザーの動作におけるこの違いに依存してlocation.hashおり、正規化していません。最終結果は、パーセント エスケープを必要とするものを使用すると、ブラウザー間で共有できない URL を取得することになります。これは、他のページで GWT 内の特定の場所にジャンプするリンクを生成したい場合に問題になります。アプリ、またはユーザーが GWT アプリ内にリンクする URL を共有することが予想される場合。(または、ユーザーが Chrome をインストールし、Web アプリケーション内の特定のスポットを指す Firefox からブックマークをインポートすると、突然ブックマークが以前のように機能しなくなります)

パラノイアの場合?、履歴トークン文字列に、、、、、、または文字を#入れること&は避けたいと思います。ただし、文字列のようなものは問題なく、クロスブラウザーです。%<>orderDetails/oid=12313378

(私が話している問題は、同じ URL を複数の異なるブラウザーで機能させることであり、さまざまなブラウザーのそれぞれで履歴トークン メソッドをまったく機能させることではないことを明確にするために編集されました)

于 2010-02-25T13:58:41.223 に答える