在D3.JS中,位于d3.selection.data(myData)之后的数据在哪里?

时间:2016-02-11 23:10:50

标签: javascript d3.js svg

假设我有类似的东西......

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中的数据,它必须在某处引用数据。

3 个答案:

答案 0 :(得分:3)

source of data(),它很混乱,但据我所知,它将数据存储在函数范围内的变量中。

这意味着它不作为返回(更新)对象的属性公开可用,但仍可用于更新内部的函数,因为它们是可以访问封闭范围的闭包。

这是我能解释的最好的方法,而不会过多地关闭闭包以及数据函数的确切运作方式。

答案 1 :(得分:2)

要添加@JosephYoung答案,是的,它将其存储在enter()函数内创建的闭包中。使用上面的示例代码console.log(initializeData),您可以检查:

enter image description here

答案 2 :(得分:0)

数据实际上绑定到DOM元素。例如,如果绑定了一堆圆圈,则可以实际运行

d3.selectAll('.circle')
  .each(function(d) { ... access element data .. });

我在进行后期渲染时会使用它。您可以使用.on( function(d) { ...d is element data ..})

的事件进行保存