d3连接散点图示例,语法问题



在本例中:https://observablehq.com/@d3/连接散点图

第一块代码的开头是这样的:

chart = {
replay;
//...create svg element and setup the chart...
return svg.node();
}

两个问题(如果这些很简单,我很抱歉,但我是javascript的新手,谷歌对我没有任何帮助(:

1( chart看起来像一个函数,因为它有一个return语句,但并没有function关键字。如果我在flask应用程序中尝试这样的操作,那么当我放置return语句时会出错,因为它被评估为对象定义?这是node.js的东西吗?

2( "重播"这句话在干什么?我在代码的其他地方没有看到任何引用

编辑:我在这里找到了答案:https://observablehq.com/@observalehq/vobservales而非javascript

简言之,该网站上的任何东西都不是javascript,这在学习D3.js时真的很令人困惑,而且几乎所有的例子都在该网站上(上面的页面有点难找到(。但我想这都是商业模式的一部分,让人们订阅和开发observalehq,而不是编写独立的网络应用程序。

我为Observable工作,是的,"Observable不是JavaScript"是最好的阅读内容。CCD_ 1正在声明一个反应变量;它不使用关键字;它可以定义为单个表达式,如x = d3.scaleLinear(),也可以定义为返回值的大括号函数块,如您所见。点击右上角菜单中的"下载代码",即可下载编译成纯JavaScript的笔记本;在这里,我注释了一个折线图示例的来源。你可以在那里看到这个单元格是如何被编译成一个普通的JavaScript函数的,这个函数传递了它所依赖的其他单元格的值。在"连接的散点图"示例中,如果你下载了代码,chart单元格的主体最终看起来像这样:

function(replay, d3, width, height, length, line, data, xAxis, yAxis, x, y, halo) {
replay;

//...create svg element and setup the chart...

return svg.node();
}

反应性的工作方式是,每当它所指的一个细胞发生变化时,都会重新评估每个细胞。replay;行利用这一点在单击按钮时重新绘制散点图,这会触发其单击事件,从而触发反应性重新评估,即使它没有传递任何数据或被分配给变量或任何东西。

(我想这是一项业务,但我们真的在努力让编码这些东西变得更容易!如果你有问题,很乐意聊天。(