客户端延迟加载到IndexedDB的DataTables jquery插件

时间:2014-09-29 17:40:16

标签: javascript jquery datatables indexeddb

我一直在使用数据表已有一段时间了,但我最近才开始使用IndexedDB。在大多数情况下,两者很好地协同工作,但是,我遇到了一些问题。

我想要做的是从本地数据库加载数据,但不是一次加载数据。原因是它加载了数千条记录非常慢。相反,我想用indexedDB做我一直在做的服务器端 - 在那里我发送了一大块记录,以及实际有多少记录的总数。 DataTables能够使用这两种信息正确地进行分页。

但是,这会使用带有url的fnAjaxSource选项。我需要采用以某种方式返回数据的函数。我还没有发现任何人做同样的事情。目前我正在为项目使用DataTables 1.9,但是,如果需要,我可以为此用户和类似页面使用1.10。但是,通过API和文档并没有告诉我任何方法告诉DataTables期望记录多于收到的记录。如果您需要我提供任何其他信息,请告诉我,但由于我不知道自己在做什么,因此无法发布示例。我希望有一个简单的选择,或者某种方式我可以编写插件来做到这一点,但我还没有看到任何能带给我希望的东西。

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

我应该澄清一下,我并没有真正遇到过IndexedDB的问题。我正在以块的形式加载我的数据,以及获得满足我的搜索条件的记录总数的计数。问题在于DataTables想要所有数据,而不仅仅是一个块,以便知道将存在多少记录以及如何进行分页。

2 个答案:

答案 0 :(得分:2)

从1.10开始,您可以在初始化DataTable时传递ajax选项的函数。 ajax documentation有详细信息

  

作为一个函数,如果需要,让Ajax调用由你自己决定,可以使用除Ajax之外的方法来获取所需的数据,例如Web存储......

     

当从数据源获取数据时,应该使用传入的单个参数调用第二个参数(此处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请求的记录数。

答案 1 :(得分:0)

我不太确定我理解你。 IDB与LocalStorage不同,其中所有内容都被加载到内存中。你可以在IDB中获得大量数据并只获取一点点数据。看看Ranges with curses打开你桌子的一小部分。

我想基本上我所说的是 - 开箱即用,不做任何事情"特别",IDB支持读取大块数据。