2012-02-10 11 views
0

jQuery Mobileアプリケーションをブラウザ履歴ナビゲーションなしで実装したいと思っています。私は、その場でページを生成し、DOMに挿入し、changeHashをfalseに設定してそれらを呼び出すことができます。その後、pagehideイベントハンドラでそれらをクリーンアップし、すべてが世界でうまくいきます。私がダイアログを呼び出すselectmenuのようなウィジェットを使うまでは。ダイアログのclose関数は明示的にwindow.history.back()を呼び出し、私の世界は爆発します。jQueryモバイルの動的アプリケーションと履歴ベースのナビゲーション

この問題を回避する簡単な方法はありますか?

もしそうでなければ、jQMはnav-lessアプリケーションを正常にサポートするように適応されるべきですか、あるいはこの種のアプリケーションには基本的には適さないのですか?

答えて

0

にhashListeningEnabledを設定してみてください私は、この目的のために偽のchangeHash =を使用しないように学びました。現在のページが常にヒストリスタックの一番上にあることを確認してください。私の場合は、ダイアログが呼び出されるときを除いてスタック上の唯一の項目です。

function showNewPage($page) { 
    $page.appendTo($.mobile.pageContainer); 
    $('.ui-page-active').bind('pagehide',function(){$(this).removeWithDependents()}); 
    $.mobile.changePage($page); 
    $.mobile.firstPage = $page; 
} 

新しいページがハッシュなしで作成され、そのURLは変更されません:これまでのところ、これはチャンピオンのように動作しているようです。実際に最初のページを置き換えているので、$ .mobile.firstPageを更新する必要がありました。 remove()の代わりにremoveWithDependents()を呼び出すと、selectmenuによって作成されたダイアログが消去されます。

幸いにも、それは私が予想していたよりもはるかに簡潔であり、私のような新人のためのちょっとした痛みです。私はこのようにjQMを「ハックしない」ように勧めるコメントをいくつか見てきましたが、jQMで伝統的なサーバー・ディスペンス・プレゼンテーション・モデルに制約をかけすぎると思います。

1
+0

ありがとうございます。問題は、ダイアログウィジェットがナビゲーションに依存して、「元になる」ウィンドウを閉じて元のウィンドウに戻ることです。 hashListeningEnabledをfalseに設定すると、ダイアログは単に閉じません。 –

+0

ああ、つまらない。問題がダイアログに固有のものであれば、私は別のウィジェットを選択することを考えています...回避策ではなく、私の目ではダイアログが前のページのポップアップであるためです。それでもダイアログが表示されても元に戻っていない場合は、バックリンクを無効にしないでください(クローズしたアイコンを削除してください):http://forum.jquery.com/topic/how-do-i - j-close-in-a-jquery-mobile-dialogを隠すだけで、ボタンにフォワードリンクを追加するだけです。 – Mark

+0

私は直接ダイアログを使用しようとはしませんでした。それはselectmenuウィジェットによって作成されているので、キーの機能を回避することを除いてどのように表示されるかを直接制御することはできません。 –

関連する問題