1

对我的 Javascript 经验不足表示歉意。我是一名 JavaScript 和 D3 新手,正在尝试改编Mike Dewar 的 D3 入门一书中地铁等待评估示例

如给定的那样,示例加载时没有绘制任何地铁线——您必须单击其中一条来绘制它。我认为更改代码很简单,以便在可视化启动时,默认情况下已经绘制了其中一条线(例如“A”线)。

我可以通过从 Dewar 脚本中的 get_timeseries_data 函数内部复制和粘贴部分代码来做到这一点(它会进行一些检查并调用 draw_timeseries 函数)。但这似乎是错误的。编写函数的重点是我应该能够直接调用 get_timeseries_data 本身,不是吗?

由于 Dewar 的最终代码块使用 selection.on('click'),因此模仿它似乎是合乎逻辑的,但使用 .on('load') 代替:

d3.select('#Line_A_key')
  .on('load', get_timeseries_data);

将此添加到脚本的末尾不起作用。它甚至没有在控制台中给出错误,所以我猜“加载”事件永远不会发生——为什么?

所以我想也许我可以直接调用 get_timeseries_data 函数而无需等待“加载”事件:

d3.select('#Line_A_key')
  .get_timeseries_data();

但这抱怨该对象没有方法“get_timeseries_data”。好的,这是真的,但引出了一个问题——我什么时候可以在 D3 中调用函数?

D3(还是全部是 JS?)似乎在某些情况下需要一个将数据和索引作为其参数的函数。我如何了解这些情况是什么?如果我已经有这种形式的函数,我是否也可以在这些情况之外调用它,或者我是否需要为其他情况编写一个全新的函数?

我无法通过浏览 D3 API 或几个在线教程中的任何一个来为自己回答这些问题,最不幸的是,也不是来自 Dewar 的书。我应该去哪里看?

4

1 回答 1

2

#Line_A_key 可能未加载。所以你不能选择它...

d3.select(window).on("load", get_timeseries_data);
于 2017-02-28T11:15:40.023 回答