2012-09-20 82 views
1

我正在開發一個應用程序使用jQuery手機,將使用HTML5離線功能(緩存清單等)。與離線網絡應用程序jQuery移動問題

基本程序是供現場技術人員查看/修改他們在沒有互聯網連接的平板電腦上的訂單。我正在使用本地瀏覽器數據庫來存儲訂單。

我有一個可以查看任何順序的orders.html頁面,但是爲了傳遞一個參數,我不能使用GET參數,因爲程序處於脫機狀態,我無法列出清單中的每一個訂單。

所以我必須使用散列參數 - 例如orders.html#o4572。但jQuery手機並不能很好地使用這個方案 - 它使用散列參數來實現它自己的方案。當我在list.html,並有鏈接到orders.html#o4572 - 它將鏈接變成list.html#o4752,並保持在同一頁面上。

我可以通過設置$.mobile.linkBindingEnabled = false;關閉jQuery Mobile的的鏈接處理,但這樣可以防止所有的Ajax導航 - 你失去了很好的過渡,並彈出對話框不「只是工作」了,你必須手動做他們。可能還有其他問題。

這是讓這個工作正常工作的唯一方法嗎?我剛剛開始使用jQuery手機,所以我覺得我錯過了一些東西。

+0

檢查了這一點:https://github.com/azicchetti/jquerymobile-router。由JQM團隊推薦。救了我。 – JonWells

+0

我已經看到了,但它看起來像是需要一個單一文件系統 - 沒有一個orders.html和list.html - 而是一個app.html。這個應用程序最終會非常大 - 如果它全部在同一個文件中,DOM將會過大。更多的維護痛苦。 – ScottR

+0

是礦山SPA。但它確實允許你傳遞參數,而不需要第一次緩存url。我認爲動態配置路由器可能也很痛苦。 – JonWells

回答

0

我已經做了類似的使用jquery-mobile-router插件與具有離線模式單頁的應用程序,但它應該工作了一個多應用程序一樣的東西,因爲與多頁面應用程序JQM的默認行爲(ajax-enabled設置爲true)是它拉入第二頁並將其附加到當前頁面的DOM。

使用JQM路由器,你應該能夠做這樣的事

var router; 

var orderHandlerRoute = function (eventType, matchObj, ui, page, evt) { 
    var params = router.getParams(matchObj[1]); 
    //use your params to pull data from localStorage 
}; 

router = new $.mobile.Router({ 
    'orders.html(?:[?/](.*))?' : {handler: "orderHandler", events: 'bs'} 
    , {orderHandler: orderHandlerRoute } 
    }); 
+0

我試過了,但是當點擊指向不同頁面的鏈接時(例如在login.html上,轉到orders.html),我收到了javascript錯誤。通過代碼跟蹤,它仍然看起來像jQuery手機的問題,將鏈接轉換爲orders.html#orders?o = 4572到login.html#orders?o = 4572。對話框也不能正常工作。 – ScottR

+0

我不確定我是否完全理解你是如何從一個頁面鏈接到另一個頁面的(它應該像'orders.html?o = 4572'這樣的東西),但是你根本不應該使用散列。如果您嘗試訪問另一個頁面中的特定頁面,則應該意識到JQM [不允許](http://jquerymobile.com/demos/1.1.1/docs/pages/page-links.html)那。 – Jack

+0

我需要使用散列參數,因爲緩存清單需要預先聲明所有頁面。在鏈接中使用動態GET參數將無法實現。我嘗試以各種方式將參數鏈接到另一頁面,但無法使其工作。 – ScottR

0

在使用jQuery Mobile時,你確實不應該使用散列參數來做其他事情。
繼續的標準方法是將您的參數與file.html?parameter=value一起傳遞,並通過javascript檢索值。
然後,您可以使用js函數處理此值,例如,如果您處於聯機狀態,可以使用ajax調用檢索數據,或者如果您處於脫機狀態,則可以從本地存儲讀取數據。 如果要基於與參數關聯的數據動態生成頁面,或者通過綁定pageinit事件來綁定changepage事件,可以通過綁定changepage事件來實現,如果要在頁面顯示後更改頁面(例如填充?表單元素)

另外,如果使用了緩存清單的阻止你usingthe參數= value語法,你可以用下面的辦法: - 寫你的目標鏈接爲file.html#pagename_itemvalue - 在pagechange事件,以便綁定覆蓋默認行爲,而是解析目標值,檢索pagenameitemvalue,並生成/訪問要顯示的內容。你可以看到這樣一個例子this page

+0

正如我在問題中提到的 - 由於它是一個離線應用程序,我無法使用頁面參數。我需要將每個可能的頁面放在緩存清單中。 – ScottR

+0

脫機並不妨礙您訪問參數。例如,[this](http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery)可以在離線模式下工作。 – Romain

+0

是的,但HTML 5緩存清單要求每個離線使用的頁面都必須在其中。 file.html?parameter = value是與file.html不同的頁面,但根據清單,file.html和file.html#o4572是* same *頁面。 – ScottR