我在项目中使用Electron js和Datables.net。问题是我想使用子行获取更多信息,当表第一次显示时,一切都按预期工作,但是更新表中的数据后,它冻结了,子行停止工作,表中的数据没有变化。 如果没有子行功能,此代码也可以正常工作。
client.connect((err, client)=> {
if(err) {
myConsole.log(err);
}
client.query("LISTEN job_status_update");
client.on('notification', function(msg) {
if (msg.name === 'notification' && msg.channel === 'job_status_update') {
var pl = JSON.parse(msg.payload);
myConsole.log(pl);
client.query('SELECT jobstatusgetalljobs()', (err, res) => {
if (err) {
myConsole.log(err.stack)
} else {
data = JSON.parse(res.rows[0].jobstatusgetalljobs)
var table = window.$('#table_id').DataTable({
data: data,
select:"single",
retrieve: true,
columns: [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": '',
"render": function () {
return '<i class="fa fa-plus-square" aria-hidden="true"></i>';
},
width:"15px"
},
{ "data": "fn" },
{ "data": "username" },
{ "data": "timestamp" },
{ "data": "path" },
{ "data": "agent" },
{ "data": "job_type" },
{ "data": "progress" },
{ "data": "status" },
{ "data": "message" },
{ "data": "priority" },
],
"order": [[1, 'asc']]
});
window.$('#table_id').DataTable().clear().draw();
window.$('#table_id tbody').on('click', 'td.details-control', function () {
var tr = window.$(this).closest('tr');
var tdi = tr.find("i.fa");
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
tdi.first().removeClass('fa-minus-square');
tdi.first().addClass('fa-plus-square');
}
else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
tdi.first().removeClass('fa-plus-square');
tdi.first().addClass('fa-minus-square');
}
});
table.on("user-select", function (e, dt, type, cell, originalEvent) {
if (window.$(cell.node()).hasClass("details-control")) {
e.preventDefault();
}
});
function format(d){
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">' +
'<tr>' +
'<td>Message :</td>' +
'<td>'+d.message+'</td>' +
'</table>';
}
window.$('#table_id').DataTable().clear().draw();
window.$('#table_id').DataTable().rows.add(data); // Add new data
window.$('#table_id').DataTable().columns.adjust().draw(); // Redraw the DataTable
}
});
}
});
先谢谢了。 编辑:添加了更多代码,当数据库中有一些更改时,此代码也会更新,也可以发现,当我两次更新信息时,一切正常。