Как обновить данные jQuery DataTables с разбивкой на страницы и показать их

У меня возникли проблемы с обновлением базовых данных jQuery DataTable. Чтобы немного объяснить это, в случае строки без разбивки на страницы я мог бы выбрать строку с помощью jQuery, обновить ее и перерисовать изменения в DataTables, как это table.row($('#item' + item.id)).invalidate().draw();

Однако в случае разбивки на страницы (невидимых) строк я не могу выбрать их с помощью jQuery, чтобы выполнить обновление, поскольку DataTables удаляет их из DOM и хранит в другом месте. Мне это нужно, потому что редактирование в одной из моих видимых строк влияет на значение в какой-то другой строке, и я хочу, чтобы это изменение было отражено.

Ниже приведена одна из моих неудачных попыток:

Я попытался перебрать данные, обновить их и перерисовать таблицу следующим образом:

table.rows().iterator('row', function (context, index) {
    if (this.row(index).data()[0] == item.id /*item is a variable*/) {
        this.row(index).data()[3] = item.qty;
        console.log(this.row(index).data());
        this.row(index).draw();
    }
});

Данные регистрируются так, как я этого хочу, но изменение не отображается в DataTable, что заставило меня подумать, что это может быть неправильный способ сделать это.

Пожалуйста помоги!


person Sammie    schedule 02.01.2019    source источник


Ответы (2)


Вы можете использовать ajax для изменения внутреннего источника данных, а затем перезагрузить таблицу. данные после модификации.

person Community    schedule 02.01.2019
comment
Ваш ответ тоже работает, но я думаю, что перезагружать данные для всей таблицы только для обновления одного значения в строке дорого. Кроме того, у меня уже есть новые данные для строки, которую я хочу обновить. Я хочу обновить значение для одной строки с разбивкой на страницы в таблице. Спасибо за ваши усилия! - person Sammie; 02.01.2019
comment
Такой подход продиктован простой логикой — как только обновление сделано, вы должны позаботиться о том, чтобы все пользователи оказались на одной странице. - person ; 02.01.2019

Наконец нашел решение без необходимости использования jQuery:

let idData = table.column(0).data();
let idx = idData.indexOf(item.id);

if (idx >= 0) {
    stocksTable.row(idx).data([item.id, item.name, item.desc, item.quantity])).draw(false);
}
person Sammie    schedule 11.01.2019