【问题标题】:I get an error on my .enter() d3我的 .enter() d3 出现错误
【发布时间】:2014-08-28 05:30:51
【问题描述】:

我正在尝试制作图表。我使用 d3 到 .enter() 来插入数据。我在 .enter() 上收到“Uncaught TypeError: undefined is not a function”。数据肯定将数据放入#act。

d3.select("#act")
    .datum(Avg(actD))
.enter().append("div")

【问题讨论】:

    标签: d3.js


    【解决方案1】:

    您不需要将.enter().datum() 一起使用,因为您没有执行join

    d3.select("#act")
        .datum(Avg(actD))
        .append("div")
    

    请参阅 Mike Bostock 的 this SO answerthe docs 以供参考。

    【讨论】:

    • 如果不先使用selectAll("div"),我不相信代码可以工作。
    • 查看此代码笔codepen.io/agconti/pen/mhDLg。在对它进行操作之前,您必须先选择空集,对吗?另外,根据上面的 OP 评论,.datum(Avg(actD)) 不需要是 .datum([Avg(actD)])
    • @agconti:不确定我是否理解,请查看this counterexample。使用.datum,您无需将基准包装在array 中。你只需要一个选择来操作,不能使用.enter()
    • 对不起,我忘了从我自己的反例中取出.enter()。 +1 为可行的解决方案和参考迈克博斯托克。
    • @agconti:很高兴它也对你有用,我以为我疯了 =)
    【解决方案2】:

    使用D3方法data

    d3.select("#act")
        .selectAll("div")
        .data(Avg(actD))
        .enter().append("div")
    

    data 适用于单个和多个数据点。如果您使用 datum,它不会计算连接,因此您不能使用 .enter() 方法附加 div。

    来自文档:

    selection.datum([值])

    获取或设置每个选定元素的绑定数据。不像 selection.data 方法,此方法不计算连接(因此 不计算进入和退出选择)。


    示例;

    d3.select("#act")
      .selectAll("div") // you need to first select an the existing / empty set before you append.
      .data([0]).enter()
      .append("div")
      .html("appended")
      .style("background-color", "red");
    

    Codepen:http://codepen.io/agconti/pen/HtnJz

    【讨论】:

    • 由于某种原因,当我输入 .data 时,我没有添加任何内容。如果我在控制台中输入: d3.select("#act").data() 我得到 [undefined]
    • @user3813223 我举个例子。
    • 谢谢我只需要我的变量 .data([Avg(actD)]) 周围的括号
    • @user3813223 没问题。如果我的帖子回答了您的问题,请您点击右侧的勾选接受它吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 2017-05-13
    • 2014-02-23
    • 2019-11-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多