Javascript 为什么需要分离一组方法?
我正在meteor.js中基于实现一个反应性折线图。在我为该图表提取的代码中,我有以下代码块,它运行良好Javascript 为什么需要分离一组方法?,javascript,svg,d3.js,Javascript,Svg,D3.js,我正在meteor.js中基于实现一个反应性折线图。在我为该图表提取的代码中,我有以下代码块,它运行良好 var paths = svg.selectAll("path.line") .data([dataset]); paths .enter() .append("path") .attr("class", "line") .attr('d', line); paths .attr('d', line); paths .exit() .remove();
var paths = svg.selectAll("path.line")
.data([dataset]);
paths
.enter()
.append("path")
.attr("class", "line")
.attr('d', line);
paths
.attr('d', line);
paths
.exit()
.remove();
但是,当我尝试编写以下内容时,轴仍会显示,但路径不会渲染。为什么会这样
var paths = svg.selectAll("path.line")
.data([dataset])
.enter()
.append("path")
.attr("class", "line")
.attr('d', line)
.exit()
.remove();
这是因为您正在调用不同对象上的函数。D3从调用
.data()
返回更新、输入和退出选择——这是您在第一个代码块的路径中存储的内容。然后获得输入、更新和退出选择并处理它们
在第二个代码块中,您正在调用.enter()
,然后处理enter选择。也就是说,.enter()
之后的所有代码都将应用于enter选择,而不是像以前一样应用于其他选择
因此,.exit().remove()
在新添加的路径
元素上被调用(这应该会给您一个错误),而不是像在第一个代码块中那样调用.data()
的返回值。当您放置attr('d',line.)attr('d',line)时,可能在第二个代码块中;第二个“d”覆盖了第一个。与第一个方法一样,它添加了它。尝试将它们拆分,看看是否可以编辑掉。但是,该部分也在第一个部分中…所以它像一个叉?另外,行path.attr('d',line)是什么
执行操作?否,每个函数调用都会对上一个操作的返回值进行操作。这意味着您正在操作的内容可能会在整个链中发生变化,这就是您的第二个代码块中发生的情况。第一个代码块中的paths.attr('d',line)
会对更新选择进行操作(没有单独的函数可以调用)。