2012-02-10 43 views
0

我想實現一個沒有瀏覽器歷史導航的jQuery Mobile應用程序(隨意問爲什麼)。我可以隨時生成頁面,將它們插入到DOM中,並將它們與changeHash設置爲false,然後在頁面隱藏事件處理程序中清理它們,並且一切都很好。直到我使用像調用對話框的selectmenu這樣的小部件。對話框的關閉函數顯式調用window.history.back(),並且我的世界崩潰。jQuery Mobile動態應用程序和基於歷史記錄的導航

這個問題有一個簡單的解決方法嗎?

如果不是,應該調整jQM以優雅地支持無需導航的應用程序,還是jQM從根本上不適合這種應用程序?

回答

0

我學會了不使用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。調用removeWithDependents()而不是remove()會清除由selectmenu創建的對話框。

幸運的是,它比我預想的要簡潔得多,對於像我這樣的新人來說,只是一點點痛苦。我已經看到了一些建議,不要以這種方式「侵入」jQM,但我認爲在jQM中將它限制爲傳統的服務器分配的表示模型的方式太過有價值。

1

http://jquerymobile.com/test/docs/api/globalconfig.html

嘗試設置hashListeningEnabled假

+0

感謝您的建議。問題在於對話框小部件依靠導航來關閉並返回到「基礎」窗口。當我將hashListeningEnabled設置爲false時,對話框不會關閉。 – 2012-02-15 15:47:13

+0

啊,知道了。那麼,如果問題是特定於對話框,那麼我的想法是可能選擇另一個小部件...不是一種解決方法,而是因爲在我眼中,對話框是上一頁的彈出窗口。如果你仍然想要對話框,但不想回去,那麼爲什麼不禁用後面的鏈接(你這樣做),刪除關閉圖標:http://forum.jquery.com/topic/how-do-i - 隱藏在jQuery中的關閉按鈕 - 移動對話框,只需在按鈕中添加一個前向鏈接? – Mark 2012-02-15 21:00:48

+0

我還沒有試過直接使用對話框。它是由selectmenu小部件創建的,所以我沒有任何直接的控制權,除了避免重要的功能外,我決定不做任何事情。 – 2012-02-16 06:28:03