Недавно я изучаю D3 v4, который имеет много изменений в версии 3. Я обнаружил проблему с реализацией следующего шаблона обновления, который я использовал в v3 довольно часто:
var data = [
[1, 2, 3],
[3, 4, 5]
]
function update(data) {
var table = d3.select('#table');
var tr = table.selectAll('tr')
.data(data);
var rowEnter = tr.enter().append('tr');
tr = rowEnter.merge(tr);
var td = tr.merge(rowEnter).selectAll("td").select("div")
.data(d=>d);
var cellEnter = td.enter().append("td")
var cellContent = cellEnter.append("div")
cellContent.append("h1")
.text("Title")
cellContent.append("h2")
.merge(td)
.text(d=>d)
}
update(data)
ref()
function ref() {
setInterval(()=>{
for (var i=0; i<2; i++) {
for (var ii=0; ii<3; ii++) {
data[i][ii] = Math.floor(Math.random() * 100) + 1
}
}
update(data)
}, 4000)
}
То, что я собираюсь сделать, это прикрепить блок фрагмента HTML внутри каждого из тд
элемент, который связан с массивом данных. Но этот блок элементов очищается, начиная со второго обновления. Почему v4 так себя ведет? Есть ли обходной путь для этого?