【问题标题】:D3 bind data for exitingD3绑定数据以退出
【发布时间】:2014-03-17 17:27:16
【问题描述】:

在这个 jsfiddle(http://jsfiddle.net/3NUJE/3/) 中,我通过传递不同的字符串来更改绑定到对象的数据键:

// Create rectangles
var rects = chart
    .selectAll('rect') 
    .data(data, function(d) {return d + 'a'}) 
    ...

// Update data -- all should be removed
d3.selectAll('rect')
    .data([5,6], function(d) { return(d + 'b'); })
    .exit()
    .transition()
    .delay(2000)
    .remove();

不幸的是,它们绑定到同一个键(即,5 和 6 不会被删除)——是否可以在不更改我传递的数据数组的情况下区分它们?

【问题讨论】:

  • 我不清楚你想做什么。您希望将新数据与哪些元素匹配,即应该保留哪些rects,删除哪些?
  • 在这种情况下,应该删除所有元素,因为键包含字符串'b',而不是'a'

标签: data-binding d3.js transition


【解决方案1】:

您可以传递给.data() 的键函数对新数据元素和已经绑定的数据元素都执行。也就是说,当您绑定数据并使用键函数时,该函数返回的键不会与数据一起存储。这意味着您在第二次调用时将 key 函数更改为什么并不重要,只要实际数据是唯一更改新数据将匹配现有数据的内容。

例如对于数据元素5,键函数返回5b。对于已经绑定到元素的数据,它返回1b4b5b 等。这两个5b 匹配。

您可以传递具有更多属性而不是数字的对象,然后使用另一个属性(对于新数据必须不同)作为键。

【讨论】:

  • 非常感谢——我想这很明显,但我以前从未遇到过这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2018-09-23
  • 2014-02-09
相关资源
最近更新 更多