首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用D3 v4进行选择的getBBox

使用D3 v4进行选择的getBBox
EN

Stack Overflow用户
提问于 2016-08-05 02:28:37
回答 1查看 5.6K关注 0票数 11

我尝试在d3 v4中使用d3.legend.js,但遇到了问题。因此,我移植了index.html以使用d3 v4,以查看问题是在我的代码中还是在d3.legend.js中。参见my gist (running version) -问题在d3.legend.js Uncaught TypeError: Cannot read property '0' of undefined的第47行。

我对d3 (或v3的更改)不是很熟悉,无法理解如何修复这个错误--有什么想法吗?

更新1:根据the release notes,这似乎与d3选择的更改方式有关。

但是仍然不确定如何从li选择中访问getBBox()方法。

更新2:如果li为非空,则li.node().getBBox()可以工作。出于某种原因,代码类似于

代码语言:javascript
复制
var li = g.selectAll(".legend-items")
             .data(["g"])
           .enter()
             .append("g")
             .attr("class", "legend-items")

如果类已经存在,则将li保留为null。

我被迫使用(有点不雅)

代码语言:javascript
复制
var licreate = g.selectAll(".legend-items")
        .data(["g"])
      .enter()
        .append("g")
        .attr("class", "legend-items");
var li = g.selectAll(".legend-items");
EN

回答 1

Stack Overflow用户

发布于 2018-07-08 21:38:08

这个问题是在D3 v4的第一天发布的,它使用的是2012年的D3插件,远远早于v4 (实际上也早于v3 )。

这里有两个必要的改变:

D3 v4选择中的

  1. 不是数组,而是对象。因此,在这里使用[0][0]是行不通的。它应该改用node()

var lbbox = li.node().getBBox()

  • In D3 v4“回车”选项不再神奇地更改“更新”选项。因此,它应该是:

lb =为真) lb.enter().append("rect").classed("legend-box",(Lb);li = li.enter().append("g").classed("legend-items",为真).merge(Li);

此外,由于我看不到“更新”选项的更新情况,我建议您在此处使用简单的“回车”选择。

以下是更新后的bl.ocks:http://bl.ocks.org/GerardoFurtado/raw/ca06385c40afa5414830b3d3d449cbe5/efeeed6ffc42051f433cfcb54c462acfd0daebb5/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38774855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档