2012-03-09 133 views
1

XML數據我已經建立了多個內部網頁的應用程序,如這樣的:的jQuery失去瀏覽器刷新

<div id="states" data-role="page"> 
    <div data-role="header"> <a href="#" onClick="parent.history.back()" data-icon="back">Back</a> 
    <h1>My List</h1> 
    </div> 
    <!-- /header --> 
    <div data-role="content"></div> 
    <!-- /content --> 
    <div data-role="footer" data-position="fixed" data-id="myfooter"> 
    <div data-role="navbar"> 
     <ul> 
     <li><a href="#" data-icon="gear">Option</a></li> 
     <li><a href="#" data-icon="home">Home</a></li> 
     <li><a href="#" data-icon="search">Search</a></li> 
     </ul> 
    </div> 
    <!-- /navbar --> 
    </div> 
    <!-- /footer --> 
</div> 
<!-- /page --> 

當頁面被初始化,我加載一個XML文件,並動態填充頁面。這工作正常。如果我刷新默認內部頁面上的屏幕,它會重新加載而不會出現問題。我可以深入一到兩頁,按下後退按鈕......而且工作也是如此。我正在使用此代碼來維護我的哈希歷史記錄(我是一個noob)。

$(document).bind("pagebeforechange", function(e, info) { 
    if (typeof info.toPage === "string") { 
     var u = $.mobile.path.parseUrl(info.toPage), 
      re = /^#.../; 

     if (u.hash.search(re) !== -1) { 
      buildLists(u, info.options); 
      e.preventDefault(); 
     } 
    } 
}); 

的問題,當我去到另一個頁面,點擊刷新出現,我的數據回來爲未定義的,我所有的data.find的(...)調用是無效的,拋出的錯誤。

有沒有人有這個問題?我如何確保我的數據是a)保留或b)重新加載。有什麼我失蹤?

我查看了this code,但這並不像我所需要的那樣動態。我所有的列表視圖都是通過XML填充的。

+0

那麼web應用程序是無狀態的...... – gdoron 2012-03-09 03:34:50

+0

同意@gdoron。我認爲你需要檢查你的UI設計。 – 2012-03-09 03:42:34

+0

感謝您的反饋。我不確定您通過查看UI設計是什麼意思。你能提供一個例子嗎?另外,通常情況下,人們是否會通過cookie跟蹤變量,並重新構建會話的最後一個「狀態」,通常情況下? – TSNev 2012-03-09 12:39:01

回答

1

您正在聽錯事件。當您更改散列時,會觸發pagebeforechange。你想在散列發生變化時改變它,就像在瀏覽器設置它時一樣。聽'hashchange'。我建議學習如何在沒有jQuery的情況下做這些事情,因爲庫只是隱藏實際的技術。

如果這不起作用,放棄jQuery(我討厭它永遠不會使用它,所有我的網站在所有設備上工作)。還有很多其他的方式來做到這一點。這裏有一個:http://www.davidpirek.com/blog/on-hash-change-javascript-listener

+0

非常感謝。這有很大幫助。 – TSNev 2012-03-10 03:50:30