【问题标题】:Difference between 'on' and 'call' in d3d3中'on'和'call'之间的区别
【发布时间】:2020-04-10 05:32:57
【问题描述】:

我对 d3 中 call 和 on 参数之间的区别有疑问。

据我所知,

1) 'on' 论点

'selection' + 'on' 正在关注一个事件或动作。 例如


d3.select().on('click', function)

transition().on('end', 函数)



以上参数被解释为

当 on() 中的某些事情发生时,在事件之后执行函数。

2)'call'参数

'selection'+'call' 参数正在使用信息在 svg 上绘制东西 在调用参数中指定。

例如,

d3.select().call(d3.axisBottom(x)) -> 在选择上绘制轴
或者 d3.select().call(brush) -> 在选区上画笔



但是! 根据我的理解,我无法解释这个论点。

scatter.select(".brush").call(brush.move, null)

这是为了消除刷子一旦移动。 应该是这样的

select().on(brush.move, function(){eliminating or hide brush})

上面的代码是我的伪代码。

如果我对调用和 on 功能的理解有误,谁能纠正我? 为什么我必须调用(brush.move, null) 来消除画笔?

我遇到这个问题的完整代码在以下链接中。 https://jsfiddle.net/soonk/4u6zL0dn/

【问题讨论】:

    标签: javascript d3.js data-visualization


    【解决方案1】:

    如果您查看selection.call() 的 API 文档,您会注意到

    scatter.select(".brush").call(brush.move, null)
    

    基本上等价于

    brush.move(scatter.select(".brush"), null)
    

    使用.call(brush.move, null) 时,实际选择scatter.select(".brush") 作为第一个参数传递给brush.move()。前一个调用的第二个参数null 作为第二个参数传递给brush.move()

    查看brush.move() 的规范,您会发现(重点是我的):

    # brush.move(group, selection)

    […] 选择 必须定义为数字数组,或null 以清除画笔选择

    把这两个位放在一起就很容易理解为什么第一条语句是用来清除画笔选择的了。

    【讨论】:

    • 是的,我明白这一点,但我感到困惑的原因是它的工作方式与 on 和 call 的正常工作方式完全不同。我认为这是一个例外。我看对了吗?
    • @BS100 并非如此,这些方法的使用方式与它们通常使用的方式几乎相同。 .on() 用于注册事件处理程序,而.call() 用于执行其名称所说的:调用函数。不要让brush.move 欺骗你,这不是一个事件,它实际上是一个被调用的函数 (github.com/d3/d3-brush/blob/master/src/brush.js#L218)。并且因为传递给它的第二个参数是null,它将清除行239-253 上的画笔选择,
    猜你喜欢
    • 2012-11-07
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多