我使用D3繪製HTML表格,並且輸入內容的效果很好。當我將新項目添加到我的數據收集時,它會正確添加新項目到表格中。通過D3繪製HTML表格不會更新現有數據
問題是每當我更新集合中的現有對象(下面的backgroundJobs集合中的對象)時。當我重新運行D3代碼來同步表格時,它不起作用。什麼都沒發生。
下面的代碼:
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);
爲什麼包括呼叫「rows.order();」? – manu08
以便錶行順序與backgroundJobs數組中的作業順序相匹配。 如果沒有顯式排序所有新作業(數據連接方面的'新' - 構成'輸入'選擇的那些)將附加到表的末尾。 – amakhrov