CoffeeScript方法作为D3js回调

时间:2015-11-03 18:09:05

标签: d3.js callback coffeescript

我只是踩到了这个bug(或者它可能是一个“功能”)

如果我将绑定方法(使用胖箭头定义)作为D3js回调传递,则使用null参数调用它:

d3.json "some.json", @handler

如果我将它括在一个绑定的闭包中(胖箭头),那么它接收它的参数ok:

d3.json "some.json", (json) => @handler json

Here is a JSFiddle showing the issue.

将胖箭头绑定方法作为标准Javascript回调(例如发送到setTimeout)或作为jQuery回调或事件处理程序传递是一种经过验证的技术,事实上我有一个完整的应用程序以这种方式编写。

为什么它在D3js中不起作用?

1 个答案:

答案 0 :(得分:3)

问题是d3.json的回调有两个参数(参见the documentation):

  

[T]使用两个参数调用回调:错误(如果有)和解析的JSON。

如果D3检测到回调函数只有一个参数,它只传递数据,但在第一个例子中不能这样做。相应地更改处理函数的定义可以解决问题:

directHandler: (e, x) =>
    @log "directHandler received #{JSON.stringify x}"

完整演示here