假设我有类似的东西......
var myData = [1, 2, 3, 4, 5];
var svg = d3.select("body").append("svg");
var initializeData = svg.selectAll("rect").data(myData);
数据(myData)存储在对象initializeData中的哪个位置?我找不到任何地方。如果方法enter()使用myData中的数据,它必须在某处引用数据。
答案 0 :(得分:3)
看source of data(),它很混乱,但据我所知,它将数据存储在函数范围内的变量中。
这意味着它不作为返回(更新)对象的属性公开可用,但仍可用于更新内部的函数,因为它们是可以访问封闭范围的闭包。
这是我能解释的最好的方法,而不会过多地关闭闭包以及数据函数的确切运作方式。
答案 1 :(得分:2)
答案 2 :(得分:0)
数据实际上绑定到DOM元素。例如,如果绑定了一堆圆圈,则可以实际运行
d3.selectAll('.circle')
.each(function(d) { ... access element data .. });
我在进行后期渲染时会使用它。您可以使用.on( function(d) { ...d is element data ..})