d3.js输入()没有正确绑定数据 - 重新创建现有数据

时间:2015-02-09 17:04:40

标签: javascript arrays object d3.js

我有一个奇怪的问题,enter()选择无法检测现有元素。每次我调用enter()时,它都会重新创建相同的元素,并且不会删除任何元素。

怎么了?

clusters = [ 
{ "clusternumber": 9,  "value": "blah1"},
{ "clusternumber": 10, "value": "blah2"},
];

function redraw()
{
var cluster = clusterView.selectAll(".cluster")
                .data(clusters, function(d) {return d.clusternumber; });

//
// Clusters entering the view
//

var clusterEnter = cluster.enter()
                        .insert("div", ".cluster");

//
// Clusters to update
//

var clusterUpdate = d3.transition(cluster)
  .style("fill-opacity", 1);

//
// Clusters to remove
//

var clusterExit = d3.transition(cluster.exit())
    .style("fill-opacity", 0)
    .remove();

}

编辑:JSFiddle here:update()被调用两次,DOM对象生成两次。这一定是我忽略的简单!

编辑:http://maxhunter.me/clusterviewd3.html的完整代码如果您关心...

1 个答案:

答案 0 :(得分:0)

原来这有点傻了:

.insert("div", ".cluster");

实际上并没有在班级cluster中创建div。

替换为:

.insert("div")
.attr("class", "cluster")

解决了这个问题!