我一直在使用数据表已有一段时间了,但我最近才开始使用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想要所有数据,而不仅仅是一个块,以便知道将存在多少记录以及如何进行分页。
答案 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
参数还将包含可用于的start
,length
等属性限制您从IndexedDB请求的记录数。
答案 1 :(得分:0)
我不太确定我理解你。 IDB与LocalStorage不同,其中所有内容都被加载到内存中。你可以在IDB中获得大量数据并只获取一点点数据。看看Ranges with curses打开你桌子的一小部分。
我想基本上我所说的是 - 开箱即用,不做任何事情"特别",IDB支持读取大块数据。