2014-09-29 86 views
1

我一直在使用數據表達一段時間,但我最近纔開始使用IndexedDB。但大多數情況下,這兩者一起工作的很好,但我遇到了一些問題。客戶端從IndexedDB延遲加載到DataTables jQuery插件

我想要做的是從本地數據庫加載數據,但不是一次加載數據。原因是它加載了數千條非常緩慢的記錄。相反,我想用indexedDB做我一直在做的服務器端 - 我發送了一大塊記錄和實際存在多少記錄的總數。 DataTables能夠使用這兩種信息來正確分頁。

但是,這使用了帶有url的fnAjaxSource選項。我需要採取一種函數,以某種方式返回數據。我還沒有發現任何人做了相同的事情。目前我正在使用DataTables 1.9作爲項目,但是,如果需要,我將能夠使用1.10用於此類和類似頁面。然而,通過API和文檔並沒有告訴我任何告訴DataTables期望更多記錄的方式。如果有任何其他信息需要我告訴我,但由於我不知道自己在做什麼,所以我無法真正發表一個示例。我希望有一個簡單的選擇,或者我可以用這種方法寫一個插件,但是我沒有看到任何能夠給我帶來希望的東西。

I have asked the question similarly on the DataTables forum here.

我要澄清,我沒有與IndexedDB的問題真的。我正在加載我的數據塊,以及獲得滿足我的搜索條件的記錄總數的計數。問題在於DataTable需要所有的數據,而不僅僅是一個塊,以便知道將存在多少記錄以及如何執行分頁。

+0

除了我的回答,如果你正在尋找超出小應用程序的東西,我會建議像[Dexie](https://github.com/dfahlander/Dexie.js)這樣的IndexedDB包裝器。它具有[偏移]功能(https://github.com/dfahlander/Dexie.js/wiki/Collection。offset())和[limit](https://github.com/dfahlander/Dexie.js/wiki/Collection.limit()),可以很容易地獲取DataTables請求的數據。那裏還有其他人,那就是我熟悉的人。 – 2015-07-25 15:04:16

回答

0

我不太確定我理解你。 IDB不像LocalStorage那樣一切都被加載到內存中。你可以在IDB中獲得大量的數據,並且只需要很少的一點。使用curses使用Ranges打開表格的一小部分。

我想基本上我在說的是 - 開箱即使不做任何「特殊」的事情,IDB支持以大塊數據讀取數據。

+0

是的,我正在閱讀大量的數據,問題在於DataTables期待「所有」數據能夠正常工作。它具有使用Ajax服務器調用的服務器端分頁功能,但這不是服務器端,我不通過Ajax執行我的操作,只是簡單的JavaScript函數。因此,它似乎沒有能力使用大塊數據進行正確的客戶端分頁,而只需要整個數據集。 – 2014-09-30 14:14:11

+0

是的 - 抱歉 - 我只是不太瞭解該插件。 – 2014-09-30 20:57:12

2

從1.10開始,初始化DataTable時,可以爲ajax選項傳遞一個函數。該ajax documentation有細節

作爲一個功能,使Ajax調用是留給自己[...]如果需要的話,比阿賈克斯其他的方法可以用來獲取所需的數據,如網絡存儲...

當從數據源獲取數據時,應使用傳入的單個參數調用第二個參數(此處爲callback) - 用於繪製表格的數據。

所以基本上:

$('#example').dataTable({ 
    ajax: function (data, callback, settings) { 
    // ... retrieve data using parameters in `data` ... 
    // ... transform result into format expected by callback ... 
    callback(transformed_result); 
    } 
}); 

此外,如果您還啓用server-side processing,那麼data參數傳遞給你的功能還將包括性能startlength等可用於限制數量您要從IndexedDB請求的記錄。