6

環境

単一ページ / ajax Web アプリ

基本的なコード構造

LocationManager (ブラウザーのハッシュを更新し、アプリケーションの場所を別のタイルに切り替える責任があります)

ページ/タイル フロー

基本情報 > 世帯情報 > 車両情報 > 購入オプション > 注文の確認 > 支払いを入力して送信

問題

ユーザーが [購入オプション] から [注文の確認] に移動すると、注文の詳細を計算するために長い (5 ~ 8 秒) サービス呼び出しが行われます。通話が解決すると、コールバックは、ユーザーを [注文の確認] ページに移動するように設計されています。問題は、ユーザーがその間にクリックして世帯情報に戻った場合、通話が解決するとすぐに「自動的に」レビュー注文に移動することです。非常に厄介なユーザーエクスペリエンス。

制限事項

通話をキャンセルすることはできません。ナビゲーションを処理するソリューションが必要です。

現在提案されている実装

calculateOrder 呼び出しを行う前に、「currentLocation」を保存します。コールバックの「currentLocation」を、意図したStartingPointとしてsetLocationメソッドに渡します。setLocation メソッドの内部if(intendedStartingPoint === Locationmanager.currentLocation) {//Navigate}

要約すると、通話の進行中にユーザーが場所を変更した場合、通話の解決時に、ユーザーはその時点で [注文の確認] に移動することを期待していないため、移動しません。

これはうまくいきますよね?

キャッチ

アプリには、実行時間の長い呼び出しのコールバック内で setLocation が呼び出される場所がたくさんあります。これは、すべての setLocation 呼び出しを新しいパラメーター (意図した開始ポイント) で更新する必要があることを意味します。私には理にかなっていますが、少し混乱する可能性があるようです.

それをクリーンアップして集中化する方法についてのアイデアはありますか?

4

4 に答える 4

5

そのため、現在、ユーザーは [購入オプション] ページの [計算] ボタンをクリックできます。次に、何らかの種類の読み込みインジケータを表示し (できれば) setLocation('ReviewOrder')、継続にアタッチされた非同期リクエストをサーバーに送信します。アプリケーションには、このパターンを使用する場所がかなりあります。

このアプローチでは、サーバーのデータ取得と UI ナビゲーションが結合されているため、(ユーザーの観点から) 予期しないリダイレクトの問題があります。頭に浮かぶ解決策は、それらを分離し、setLocationすべての長時間実行される要求の継続から呼び出しを削除することです。次の方法で機能します。

ユーザーが [計算] ボタンをクリックすると、非同期リクエストが開始され、同時にすぐに [注文の確認] ページに移動します (ユーザーは [計算] ボタンが [注文の確認] に移動することを明確に理解しているため、これは UX の観点から重要です)。[注文の確認] ページで、「お待ちください。残り約 10 秒です...」などの読み込みインジケータを表示します。リクエストが完了したら、読み込みインジケータを非表示にしてデータを表示します。

このようにして、ユーザーはアプリケーションのボタンをクリックするたびに同じことが起こる (ビューに移動する) ことを知っている一貫した UX を持つことができ、驚くべき自動リダイレクトはありません。

于 2015-08-27T14:21:59.860 に答える
0

まず、ユーザーが前のページに戻って入力した情報を変更できる場合は、保留中のサービス呼び出しを無効にする必要があります。古い情報に基づくサービス コールが戻ってきた場合は、破棄する必要があります。

これは、if(intendedStartingPoint === Locationmanager.currentLocation) {//Navigate}十分ではないことを意味します。のようなことをしなければなりませんif(intendedStartingPoint === Locationmanager.currentLocation && /* no information altered in the meantime*/) {//Navigate}

次に、設計に関する質問です。具体的なコードなしでこれを構築するのは少し難しいですが、次のことができます。

  • で長時間実行される呼び出しを登録および管理する手段を提供するLocationManager
  • 実行時間の長い呼び出しは、常にLocationManager
  • LocationManager同時にアクティブな長時間通話が最大 1 つであることを保証する必要があります。
  • 場所の変更が発生した場合、すべての (または 1 つのアクティブな) 長時間実行呼び出しを無効にする必要があります。
  • 長時間実行される呼び出しのコールバックは、無効化されていないかどうかを確認し、無効化されている場合にのみナビゲートする必要があります。LocationManagerすべてのコールバックに対して統一された方法でこれを行うことができます。
  • 実行時間の長い新しい呼び出しは、実行中の呼び出しを置き換える/無効にするか、必要に応じて拒否することができます。

これがあなたの具体的な状況で理にかなっていることを願っています。

于 2015-08-27T14:31:42.210 に答える