jquery-mobile(jqm)とノックアウトを使用して構築されたモバイルシングルページWebアプリケーションがあります。アプリケーション自体には複数のページがありますが、それらはすべて1つのHTMLドキュメントに含まれています。
問題:「ページのビューモデルの作成」を同期から非同期の動作に変更した後、データの準備ができる前にjquery-mobileがイベントを発生させるという問題があります。
背景:最近まで、サンプルデータ(基本的には巨大なJSONブロブ)を使用していて、すべてがスムーズに機能していました。さまざまなソースからのビューモデルの新しい非同期構成では、データはすぐには準備できず、私の「buildViewModel」メソッドは、データを同期的に返すだけでなく、継続コールバックを受け取ります。
pagebeforecreateイベントとpagebeforechangeイベントをサブスクライブし、コードを実行してここにビューモデルを設定します。問題は、イベントハンドラーから戻った後、データが使用可能になる前に、jqmが残りのイベントチェーンをトリガーすることです。これにより、ページが準備されていないページに遷移しますが、これは望ましくありません。
event.preventDefault
ページをa)拡張し、b)ページ遷移を実行する準備ができたら、すべての前のイベントを呼び出して手動で$ .mobile.changePageを呼び出しようとしましたが、運がありませんでした。
jquery-mobileソースをスキャンしましたが、pagebeforeshow
イベントを遅らせることができるように見えるものを見つけることができませんでした。これは、ページを適切にレンダリングできるようにするために基本的に必要なものです。
jquery-mobileがページの拡張を試みる前、およびページへの移行を実行する前に、1)データが利用可能であり、2)ノックアウトが適用されて初期DOM操作を実行していることを確認するにはどうすればよいですか?
同期ajaxを使用してリソースをフェッチすることも検討しましたが、これは(PhoneGap / Cordovaを使用して)デバイスからロードされたリソースでは機能せず、回避したい他の悪影響があります。
FWIW、クリックハンドラーをどこにでも配線して、すべてのナビゲーションイベントを手動で処理する必要をなくしたいのですが、必要に応じてすべてのソリューションを利用できます。
これが重複している場合はお詫びします。たくさんの質問を検索して読みましたが、まったく同じ答えや質問は見つかりませんでした。これは一般的なシナリオだと思うので、私がこの問題に最初に遭遇するのは信じられないことです。
更新:問題シナリオの説明を明確にしました。