3

私のアプリでは、比較的複雑なアクティビティ/場所があります。アクティビティの開始時に状態(履歴トークンからモデルまで)を解決すると、サーバーとの相互作用が発生します。ユーザーの操作では、アクティビティはモデルの必要な部分のみを更新するため、一部のサーバーの操作を保護します。アクティビティ/モデルには内部状態があります。

アクティビティを(再)開始せずに、ブラウザの履歴に状態を反映する方法はありますか?(History.newItem(token)また、活動の開始を引き起こします)

UPDATE Chrisのソリューションは「ほぼ」機能しますが、別の問題が発生しました。私のUIには、リセットボタン(空のトークンがある場所へのリンク)があります。UIをクリックすると、トークンは正常に更新されますが、リセットボタンが機能しなくなります。gwtは同じ場所にあると見なすため、リセットクリックを無視します。これ以前は、問題はほぼ同じでした。トークンと場所が変更されなかったため、リセットボタンも機能しませんでした。GWTはこれを「同じ場所に戻るように求められた」としてログに記録します

それで、場所の同等性に関係なく、gwtにアクティビティを再開させる方法はありますか?

4

2 に答える 2

3

新しい場所に移動しますがActivityMapper、同じアクティビティインスタンスを返します。そうすれば、アクティビティは再開されません。
ただし、場所が他の手段(ブラウザの履歴など)から変更されたときにアクティビティを更新する手段を見つける必要があります。たとえば、場所の変更時にアクティビティの状態を更新するGWTMVPを参照してください。

于 2012-08-23T11:46:49.243 に答える
2

半解決策があります。お勧めしたくはありませんが、ここに追加したいと思います。この解決策の欠点を警告するためです。

を呼び出すことで、イベントを発生させずに履歴にトークンを追加できHistory.newItem(token, false)ます。

これは半解決策です。理由は次のとおりです。

  • 正しく機能します(トークンを正しく作成する限り)。
  • パフォーマンスの問題の一部も解決されました。トークンを履歴に追加するときに、アクティビティが再開されません。
  • ただし、ユーザーが履歴を前後に移動した場合でも、パフォーマンスの問題が発生します(そのため、イベントが再度発生します)。
于 2012-08-23T12:02:21.217 に答える