javascript - 创建路径时丢失数据绑定(bind)

标签 javascript d3.js

我完全承认我才接触 D3 几周,但我已经在这里坐了几个小时,现在调试无济于事。

注意隐藏在匿名函数中的两个 console.log(d) 语句。 'dummy' 属性中的返回值,d 属性中的不返回值。

这两者有什么不同?

var myEdges = [
    {
        in: "934e3e11-3f9b-11e9-b2b9-c54f58764873",
        out: "936807a1-3f9b-11e9-b2b9-c54f58764873"
    },
]

svg.selectAll('path:not([elementType=temp-path])').data(myEdges)
    .enter().append('path')
        .attr("fill", "none")
        .attr("stroke", "blue")
        .style("stroke-width", "2px")
        .attr('dummy', function(d) { console.log(d); return d;})
        .attr('d', d3.linkVertical()
                                .x(function(d) { console.log(d); return d.in; })
                                .y(function(d) { return d.out; }));

最佳答案

问题不在于数据 (d) 属性没有被传递:它是。这里的问题只是链接生成器期望的数据结构。

如果您查看 API ,您会看到链接生成器默认情况下需要这样的数据结构:

{
  source: foo,
  target: baz
}

顺便说一句,您可以使用 link.source()link.target() 更改这些属性。

因此,如果我们更改您的数据结构,控制台将正常工作:

var svg = d3.select("svg");

var myEdges = [{
  source: { in: "934e3e11-3f9b-11e9-b2b9-c54f58764873",
    out: "936807a1-3f9b-11e9-b2b9-c54f58764873"
  },
  target: { in: "934e3e11-3f9b-11e9-b2b9-c54f58764873",
    out: "936807a1-3f9b-11e9-b2b9-c54f58764873"
  }
}]

svg.selectAll('path:not([elementType=temp-path])').data(myEdges)
  .enter().append('path')
  .attr("fill", "none")
  .attr("stroke", "blue")
  .style("stroke-width", "2px")
  .attr('dummy', function(d) {
    console.log("dummy here: " + d);
    return d;
  })
  .attr('d', d3.linkVertical()
    .x(function(d) {
      console.log(d);
      return d.in;
    })
    .y(function(d) {
      return d.out;
    }));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<svg></svg>

最后,这些其他答案可能会帮助您理解链接生成器所需的数据结构:https://stackoverflow.com/a/44760465/5768908https://stackoverflow.com/a/51424331/5768908

关于javascript - 创建路径时丢失数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55013146/

相关文章:

javascript - D3 中轴和网格的不同颜色

javascript - D3.js 强制布局突出显示,无需单击或悬停

javascript - D3.js 线图不接触端点

javascript - 根据算术级数动态分配高度

javascript - 更新多个圆环图 d3.js 的大小和值

javascript - Angular 生成多个 ng-repeats

javascript - 如何在不使用 XmlService 的情况下解析 Google Apps 脚本中的 HTML 字符串?

javascript - 每个带有 ajax 调用的 jQuery 将在完成之前继续

javascript - 使用 getElementsByTagName 更改 &lt;textarea&gt; 的样式 文本从中心向左对齐

javascript - 自定义 mobiscroll 中的动态内容