No puedo entender cómo funciona d3.call () y cuándo y dónde usarlo. Aquí está el enlace del tutorial que estoy tratando de completar.
¿Alguien puede explicar específicamente qué está haciendo esta pieza?
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom");
svg.append("g").call(xAxis);
javascript
d3.js
Andy897
fuente
fuente
call()
haceRespuestas:
Creo que el truco aquí es entender que xAxis es una función que genera un montón de elementos SVG. De hecho, es la función devuelta por
d3.svg.axis()
. Las funciones de escala y orientación son solo parte de la sintaxis de encadenamiento (lea más de eso aquí: http://alignedleft.com/tutorials/d3/chaining-methods/ ).Por lo tanto,
svg.append("g")
agrega un elemento de grupo SVG al svg y devuelve una referencia a sí mismo en forma de selección (la misma sintaxis de cadena en el trabajo aquí). Cuando usacall
en una selección, está llamando a la función nombradaxAxis
en los elementos de la seleccióng
. En este caso se está ejecutando la función del eje,xAxis
sobre el recién creado y el grupo anexa,g
.Si eso aún no tiene sentido, la sintaxis anterior es equivalente a:
xAxis(svg.append("g"));
o:
d3.svg.axis() .scale(xScale) .orient("bottom")(svg.append("g"));
fuente
.call()
método en general. No explica las consecuencias de llamar al objeto eje en particular. Y no se acerca a justificar la situación surrealista de un objeto eje comportándose como un objeto y una función . ¿Por qué en el mundo hacer eso? De acuerdo, los documentos dicen que llamarlo representa el eje . ¿Es eso mejor que darle al objeto de eje un método .render ()? ¿No apoyaría eso un proceso mucho más sencilloxAxis.scale(...).orient(...).render(...)
Lo que la respuesta aceptada omitió en mi opinión es que
.call()
es una función API D3 y no debe confundirse con Function.prototype.call ()selection.call(function[, arguments…])
Ahora di:
d3.selectAll("div").call(name, "John", "Snow");
Esto es aproximadamente equivalente a:
name(d3.selectAll("div"), "John", "Snow");
La única diferencia es que selection.call siempre devuelve la selección y no el valor de retorno de la función llamada , name.
fuente