1

GWTアプリに履歴機能を追加しようとしています。

私の理解では、GWTが提供しなければならない基本的な履歴サポートは確かに基本的です...または私は非常に基本的と言うべきです。

現在スタックの最上位にあるトークン以外の状態に関する追加情報は実際には保存されません。つまり、ポップアウトされたトークンのような情報を取得することを期待します。これは、私たちが残したものであり、また、戻るか進むかを問わず、情報を取得する可能性があります。

基本的なメカニズムは、ページに「高度な」状態がないことを前提としています。つまり、現在のトークンが「メニュー」の場合、このメニューページのどこから来たかは関係ありません。ただし、現時点で特定のページを離れているかどうかを確認したいのですが、そうする場合は、最初にデータを保存するように警告を表示したいと思います。

さらに、一部のページはデフォルトのコンストラクターを使用していませんが、代わりに、現在表示されているページから特定の情報を取得します。これにより、すべてのページが作成され、アプリのすべてのボタンが履歴トークンで遊んでいる一元化された場所を確保できなくなります。(ここで、たとえば37ページでアドバイスされています。)

とにかく、私はここでかなり迷っています。アプリを書き直さずにバック/フォワードの基本的なサポートを実現するためにどのような道をたどるべきかわかりません。

誰かの考えやアイデアはありますか?

4

3 に答える 3

1

あなたはGWTのアクティビティと場所のデザインパターンに精通していると思います。必要なすべてのメカニズム、つまりアクティビティのトークンとmayStop()メソッドを提供します。

保存されていないデータがある可能性のあるビューがある場合は、変更が失われる可能性がある場合にユーザーに警告するために、mayStop()から呼び出すhasChanges()メソッドを常に実装します。

トークンは必要に応じて具体的にすることができることに注意してください。トークンには、必要なページに関する情報が含まれている可能性があるため、トークンを解析して操作できます。何かのようなもの:

myPage.jsp /#CALENDAR:classId = 900&option = Teachers&menuItem = month

必要に応じて、前のページをトークンに簡単に追加できます。

アクティビティと場所のパターンは、必要なものすべてを提供してくれます。履歴管理について心配する必要はありません。ブラウザに任せています。

于 2012-09-18T00:48:55.903 に答える
1

出身地を追跡する必要がある場合は、自分で簡単に行うことができます。トークンをグローバル状態で保存し、新しいトークンでアクションを実行した後にのみ更新するのと同じくらい簡単です。

参考までに、それを実行します(文字列ベースのトークンではなく抽象化PlaceControllerを使用)。Placeまた、実際に移動を行う前にユーザーに確認を求めるPlaceChangeRequestEventことができるを起動します( )。setMessagePlaceChangeEvent

私はあなたPlaceControllerが生ではなく使用に移行することを提案していませんHistory(あなたがそれを後悔しないと確信しているとしても)、これが可能であることを指摘するだけです。

GWTの履歴を「進む」か「戻る」かを判断するにはどうすればよいですか?も参照してください。およびGWT2.1プレイス/アクティビティテクニックの不具合:ナビゲーションが確認される前にURLが変更される

于 2012-09-18T09:35:29.503 に答える
0

トークンメカニズムは基本的ですが、追加の状態を表す複雑なトークンを作成し、それを解析して後でその状態を取得することを妨げるものは何もありません。もちろん、ブラウザがサポートするトークンまたはURLのサイズによって制限されますが、それでも多くのことができます。ただし、ブレッドクラムや履歴追跡などのより複雑なものはあまりサポートされていません。これらを実装するには、コーディングが必要になります。

于 2012-09-18T00:46:26.957 に答える