Używam D3, aby narysować tabelę HTML, a wszystko działa wspaniale przy wejściu. Kiedy dodaję nowy element do mojego zbioru danych, dodaje on poprawnie nowy element do tabeli.Rysowanie tabeli HTML przez D3 nie aktualizuje istniejących danych
Problem występuje, gdy aktualizuję istniejący obiekt (obiekt w kolekcji backgroundJobs poniżej) w kolekcji. Kiedy ponownie uruchomię kod D3, aby zsynchronizować tabelę, nie działa. Nic się nie dzieje.
Oto kod:
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);
dlaczego to wywołanie 'rows.order();'? – manu08
Aby kolejność wierszy w tabeli była zgodna z kolejnością zadań w tablicy backgroundJobs. Bez wyraźnego sortowania wszystkich nowych zadań ("nowe" pod względem łączenia danych - te, które stanowią "wejście" wyboru) są dołączane na końcu tabeli. – amakhrov