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

How do I get the showing rows from datatable Scroller extention?

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

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

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);
}

Update 1: My Init of Scroller table:

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);
    });
};

Update 2 Deeper elaborating on the origional reason for the question to clarify.

好吧,长话短说。我的 table 包含 26000 行,加载它需要 7 分钟。它包含大量的数据库调用,JSON 的大小为 21MB!我想优化它。 第一次尝试:我将我的 json 设置为绝对最小值,将其降至 1.5MB,但它仍然花费了将近 7mins。在第二次测试中,它包含所有 html,硬编码 numbers/strings,我进行了 0 次数据库调用。只用了3.5secs!。昨天我不知道我只需要专注于优化对数据库的调用。 昨天,当我发布原始查询时,我的想法是填充 table 而不从数据库中提取任何数据,而是以一种延迟加载的方式加载它们。假设我展示了前 10 行。每个单元格有 3 列,我需要为每个单元格调用数据库,总共 30 次。所以想法是对 (10) 当前行发出 30 个请求,并用实际值替换占位符。如果你能理解。我仍然会比 26.000 * 3 个数据库调用更好:) 为此,我需要连接一个事件以获取 10 个当前行 ID,然后我可以循环发出 30 AJAX 请求。所以也许这是我需要的滚动事件,如果有这样的人的话。 但我不知道这是不是个好主意。通常一个 "good" idea 只是 "good" before/until 你学到最好的实践:) 我想我将开始专注于通过一些内部连接减少数据库调用,你有什么,检索一个大的结果集,我可以在 15 秒内循环遍历并填充我所有的 26.000(以及后来的 50.000)行!

SOLUTION

使用 xhr event to handle Ajax requests and page.info() 检索有关 table 的信息,如下所示。

请注意,在初始化 table 以处理初始 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);
});

DEMO

有关代码和演示,请参阅 this jsFiddle