Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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
D3.js 使用setInterval和d3js更新值_D3.js - Fatal编程技术网

D3.js 使用setInterval和d3js更新值

D3.js 使用setInterval和d3js更新值,d3.js,D3.js,我不确定这个问题是不是一团糟。如果有人能告诉我一些事情,我将非常感激 我正在尝试更新使用d3js绘制的现有圆弧: var arc = d3.svg.arc() .startAngle(0) .innerRadius(70) .outerRadius(100); setInterval(function(){ change(); },3000); function change() { var x = d3.selectAll("some_entity")

我不确定这个问题是不是一团糟。如果有人能告诉我一些事情,我将非常感激

我正在尝试更新使用d3js绘制的现有圆弧:

var arc = d3.svg.arc()
    .startAngle(0)
    .innerRadius(70)
    .outerRadius(100);

setInterval(function(){ change(); },3000);

function change() {
    var x = d3.selectAll("some_entity")
          .data(data)
          .attr("d", arc.endAngle(twoPi * 0.7) )
          .attr("class", function(d) { return d.some_field });
}
这段代码完全按照预期工作。选择“一些实体”,设置数据,绘制70%的圆弧,并用相应的数据填充“类”属性。如果我根据以下数据更改要绘制的“d”属性:

function change() {
    var x = d3.selectAll("some_entity")
          .data(data)
          .attr("d", function(d) { return arc.endAngle(twoPi * d.progress); } )
          .attr("class", function(d) { return d.some_field });
}
奇怪的事情发生了。将引发此错误:

Error: Problem parsing d="function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ys,a=u.apply(this,arguments)+ys,c=(o>a&&(c=o,o=a,a=c),a-o),s=Sa>c?"0":"1",l=Math.cos(o),...
这就像根本没有对arc函数求值一样!。返回函数体(或类似的内容)。我不知道这是否是由于函数的上下文造成的。我尝试过不同的方法,比如尝试将弧存储在更全局的上下文中,或者在其中重新创建对象,但没有任何效果


如果我对函数求值,它实际上会返回一个圆弧(对应的svg路径)。但我不明白为什么它的行为有所不同。我在调用不同的对象吗?

如果仔细观察,您会发现非工作调用在函数中,而工作调用不是:

.attr("d", arc.endAngle(twoPi * 0.7) )  // working
.attr("d", function(d) { return arc.endAngle(twoPi * d.progress); } )  // not working
如果没有显式声明函数,Javascript将传递参数。因此,要使其与显式函数一起工作,需要显式传递参数:

.attr("d", function(d) { return arc.endAngle(twoPi * d.progress)(d); } )

这就是您收到的错误消息告诉您的——您确实返回了一个未计算的函数,它是
arc.endAngle()

的返回值,jsbin/JSFIDLE会很好,这样其他人可以更容易地进行实验。非常感谢Lars。现在我看到了:)