Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么需要分离一组方法?_Javascript_Svg_D3.js - Fatal编程技术网

Javascript 为什么需要分离一组方法?

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();

我正在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])
    .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)
会对更新选择进行操作(没有单独的函数可以调用)。