信息更新后数据表冻结

时间:2018-07-22 07:54:47

标签: javascript

我在项目中使用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



            }
        });
    }
});

先谢谢了。 编辑:添加了更多代码,当数据库中有一些更改时,此代码也会更新,也可以发现,当我两次更新信息时,一切正常。

0 个答案:

没有答案