如何.move()选定的画笔?

时间:2018-08-10 01:30:37

标签: javascript d3.js

TL; DR::如何移动d3.select('#a_brush')

问题

我在<g>组的axes组中有画笔。每个<g>轴包含一个d3轴和一个d3画笔。在axes的更新选择中,我要更新d3轴和笔刷。

axes.each(function (d) { d3.select(this).select('.axis').call(d3.axisBottom(d[1])) });
axes.each(function (d) { d3.select(this).select('.brush').call(brush.move, f(d)) });

在上面,axes是更新选择。假设f(d)产生一个适当的数组。两行中的第一行有效,但第二行抛出:

Uncaught TypeError: Cannot read property 'move' of undefined

那可能是因为我没有保存任何名为brush的变量。我希望直接在所选内容上调用.move方法,而不必保存画笔变量

什么是在选择中移动笔刷的合适命名法

axes.each(function (d) { d3.select(this).select('.brush') ?? ... somehow move the brush to f(d) ...

注释

1 个答案:

答案 0 :(得分:2)

您绝对应该为画笔定义一个变量(或常量),例如:

def __repr__(self):
    return repr(self.c)

这样,您无需每次都自定义范围和其他参数。但是,如果出于任何原因您确实不想这样做,只需将defaultdict(<class 'list'>, {0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 2: [20]}) 更改为const brush = d3.brush();

brush

这是一个基本的演示,请单击按钮以移动画笔:

d3.brush()
d3.select(this).select('.brush').call(d3.brush().move, f(d))
const svg = d3.select("svg");

const g = svg.append("g");

g.call(d3.brush());

d3.select("button").on("click", function() {
  g.call(d3.brush().move, [
    [100, 0],
    [400, 100]
  ])
})