Javascript库d3调用函数


79

我无法理解d3.call()的工作原理以及何时何地使用它。是我要完成的教程链接。

有人可以请您具体解释这件作品在做什么

var xAxis = d3.svg.axis()
              .scale(xScale)
              .orient("bottom");

svg.append("g").call(xAxis);

您提供的链接说明了什么call()
伊布

17
是的,但是我仍然无法获得svg.append(“ g”).call(xAxis); 正在做:(
Andy897

Answers:


109

我认为这里的技巧是要了解xAxis是一个生成一堆SVG元素的函数。实际上,它是由返回的函数d3.svg.axis()。scale和Orient函数只是链接语法的一部分(有关更多信息,请参见:http : //alignedleft.com/tutorials/d3/chaining-methods/)。

因此,svg.append("g")将SVG组元素追加到svg并以选择的形式返回引用其自身(此处使用相同的链语法)。在选择上使用时call,您将调用xAxis在选择的元素上命名的函数g。在这种情况下,您将xAxis在新创建并附加的组上运行轴功能g

如果那仍然没有道理,则上面的语法等效于:

xAxis(svg.append("g"));

要么:

d3.svg.axis()
      .scale(xScale)
      .orient("bottom")(svg.append("g"));

一个人如何编辑svg.axis()的G元素?我的标签相互渗出,我想对它们进行转换。但是我似乎无法访问这些元素
CQM 2013年

在此处检查答案stackoverflow.com/questions/12825630/…选择文本或刻度元素后,如果需要,您应该能够应用转换。
2013年

一个或另一个调用xAxis有什么区别吗?
我喜欢

4
.call()总体上,这很好地解释了该方法。它没有特别说明调用轴对象的后果。而且还不能证明轴对象既具有对象又具有函数的超现实状况。为什么要这样做?好的,所以文档说调用它会渲染轴。这比给轴对象提供.render()方法更好吗?那不会支持更直接的方法吗?xAxis.scale(...).orient(...).render(...)
Bob Stein

1
在select调用中的文档中:“唯一的区别是selection.call总是返回选择内容,而不是被调用函数name的返回值。”
heltonbiker

2

IMO接受的答案.call()D3 API函数,不要与Function.prototype.call()混淆

selection.call(function[, arguments…])

完全调用一次指定的函数,并将此选择与任何可选参数一起传递。返回此选择。这等效于手动调用功能,但有助于方法链接。例如,要在可重用函数中设置几种样式:

现在说:

d3.selectAll("div").call(name, "John", "Snow");

这大致相当于:

name(d3.selectAll("div"), "John", "Snow");

唯一的区别是selection.call总是返回选择内容,而不是被调用函数name的返回值

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.