Sto usando D3 per disegnare una tabella HTML e le cose funzionano benissimo su invio. Quando aggiungo un nuovo elemento alla mia raccolta di dati, aggiunge correttamente il nuovo elemento alla tabella.Disegnare una tabella HTML tramite D3 non aggiorna i dati esistenti
Il problema si verifica quando aggiorno un oggetto esistente (un oggetto nella raccolta backgroundJobs sottostante) all'interno della raccolta. Quando rieseguo il codice D3 per sincronizzare la tabella, non funziona. Non accade nulla.
Ecco il codice:
var visibleColumns = ['Name', 'Start', 'End', 'Status', 'Metadata', 'Errors'];
var table = d3.select('#jobs').append('table');
var thead = table.append('thead');
var tbody = table.append('tbody');
thead.append("tr")
.selectAll("th")
.data(visibleColumns)
.enter()
.append("th")
.text(function (column) { return column; });
function tick() {
var rows = tbody.selectAll("tr")
.data(backgroundJobs, function(d) {
return d.name;
})
.enter()
.append("tr");
var cells = rows.selectAll("td")
.data(function(row) {
return [{column: 'Name', value: row.name},
{column: 'Start', value: row.startedTimestamp},
{column: 'End', value: row.endedTimestamp},
{column: 'Status', value: row.isRunning},
{column: 'Metadata', value: ''},
{column: 'Errors', value: row.errorMsg}];
})
.enter()
.append("td")
.text(function(d) { return d.value; });
}
setInterval(tick, 500);
perché comprendono la chiamata 'rows.order();'? – manu08
In modo che l'ordine delle righe della tabella corrisponda all'ordine dei lavori nell'array backgroundJobs. Senza l'ordinamento esplicito tutti i nuovi lavori ("nuovi" in termini di unione dati - quelli che formano la selezione "invio") vengono aggiunti alla fine della tabella. – amakhrov