0

このhttp://flowingdata.com/2012/08/02/how-to-make-an-interactive-network-visualization/ の作業

このコード行では:

var node = nodesG.selectAll("circle.node").data(nodes, function (d) {
        console.log("hello");
        return d.id;
    });

console.log決して実行されません。理由はわかりません。

これはnodesG次のとおりです。

var vis = d3.select(selection).append("svg")
        .attr("width", width)
        .attr("height", height);
nodesG = vis.append("g").attr("id", "nodes");
4

1 に答える 1

2

2つのことが思い浮かびます。親が存在しないか、データが空です。それか、コードのこの部分に到達することはありません。

これを試して:

var data = [1,2,3,4,5]

var body = d3.select("body")
var nothing = d3.select("#wut")

//shouldn't be called
var noparent = nothing.selectAll("div").data(data, function(d){
    alert("no parent CALLED"); return d;
})

var nodata = body.selectAll("div").data([], function(d){
    alert("no data CALLED"); 
    return d;
})

var wrongdata = body.selectAll("div").data({banana:2, apple:3}, function(d){
    alert("wrong data CALLED"); 
    return d;
})

//should be called
var noenter = body.selectAll("div").data(data, function(d){
    alert("no enter CALLED"); 
    return d;
})

var nodes = body.selectAll("div").data(data, function(d){
    alert("normal CALLED"); 
    return d;
}).enter().append("div")
  .text(function(d){ return d})

編集:非配列が結合を引き起こさないことを示すテストを追加しました。

于 2013-04-07T07:23:36.423 に答える