如何从数据表Scroller扩展中获取显示行?

时间:2015-09-10 19:36:08

标签: javascript events datatable callback datatables

对数据表使用Scroller扩展时,您没有分页但在一个滚动条中有所有行。我想知道,在向下滚动表格之后会发生什么事件,例如请参阅100行的第50-60行。我还需要知道如何从数据表中获取10行。我正在使用最新版本。非常感谢。

这是在没有 Scroller扩展的情况下从Datatable.net 中获取当前页面的行的方法。

drawCallback: function (settings) {
    var api = new $.fn.dataTable.Api(settings);

    // Output the data for the visible rows to the browser's console
    console.log(api.rows({ page: 'current' }).data().length);
}
  

更新1 :我的Scroller表初始化:

initScrollerTable = function ($table, url, inclFilter, dataTableOptionsSpecific) {
    $.ajax({
        method: "POST",
        url: url,
        data: dataParameterHelper.getCommonData(),
        dataType: "json"
    })
    .done(function (rows) {
        var dataTableOptions = $.extend(
            {},
            { data: rows },
            dataTableOptionsSpecific
        );

        initTable($table, inclFilter, dataTableOptions);
    });
};
  

更新2 更深入地阐述要澄清问题的原因。

好的长话短说。我的表包含26000行,加载它需要7分钟。它包含大量的DB调用,而JSON的大小为21MB!我想优化它。 第一次尝试:我将我的json绊到绝对最小值,将其降至1.5MB,但仍然只花了7mins。在第二个测试中它包含所有的html,带有硬编码的数字/字符串,我做了0个DB调用。它只花了3.5secs!。昨天我不知道我只需要专注于优化我对数据库的调用。 昨天,当我发布原始任务时,我的想法是填充表格而不从数据库中提取任何数据,而是以一种延迟加载方式加载它们。假设我展示了第10行。我需要为每个单元格调用DB,每行3列,总共30次。因此,我们的想法是对(10)当前行进行30次请求,并用实际值替换占位符。如果你明白的话。我仍然会比26.000 * 3 DB调用更好:) 为此,我需要连接一个事件来获取10个当前行-id,然后我可以循环执行30个AJAX请求。所以也许这是我需要的卷轴事件,如果有这样的人。 但我不知道这是不是一个好主意。通常一个“好”的想法在你学习最好的实践之前/之前只是“好”的:) 我想我将开始专注于减少带有一些内连接的DB调用以及你有什么,检索一个大的结果集,我可以循环并填充所有我的26.000(以及后来的50.000)行,在15秒内完成!

1 个答案:

答案 0 :(得分:1)

  

<强>解

使用xhr事件处理Ajax请求,使用page.info()检索有关表的信息,如下所示。

请注意,在初始化表以处理初始Ajax请求之前,需要附加事件处理程序。

$('#example').on('xhr.dt', function ( e, settings, json, xhr ) {
    var api = new $.fn.dataTable.Api(settings);
    var info = api.page.info();

    console.log('Data has been loaded', info);
});
  

<强>样本

请参阅this jsFiddle以获取代码和演示。