2
我一模一樣的模型更新我的數據(使用D3)的兩倍時爲什麼D3刪除數據。秒更新
首次更新時,我可以看到數據()。輸入()包含了一些元素和數據()。退出()是空的。這對我來說是可以理解的。在第二次更新期間(使用相同的模型)data()。enter()是空的(正如我想的那樣),但data()。exit()不是空的,因此它在第二次更新期間刪除所有節點更新。這是我不明白的。當你只使用嵌套進入和退出平原g
元素
// http://jsfiddle.net/24yqteo0/
// http://jsfiddle.net/6du29258/ - example with displaying some data
var model = {
smth: 'test',
rows: [
{
label: 'label1',
series: [
{
test: 'test1_1'
},
{
test: 'test1_2'
}
]
},
{
label: 'label2',
series: [
{
test: 'test2'
}
]
}
]
};
var svg = d3.select("body").append("svg");
updateData(model);
console.log('// ------------- new update');
updateData(model);
function updateData(model) {
var selection = svg.selectAll('g').data(model.rows);
console.log('selection enter size: ' + selection.enter().size());
var rows = selection.enter().append('g');
var rowData = rows.append('g').selectAll('g')
.data(function (d) {
return d.series;
});
console.log('rowdata enter size: ' + rowData.enter().size());
var seriesGroup = rowData.enter().append('g');
console.log('rowdata exit size: ' + rowData.exit().size());
rowData.exit().remove();
console.log('selection exit size: ' + selection.exit().size());
selection.exit().remove();
}
在一般更新模式在這裏是一個很好的例子:http://bl.ocks.org/mbostock/3808218 – abksrv
我的模型數據爲一位嵌套,這會導致問題。雖然我找不到那裏的錯誤。 – tobi