gpt4 book ai didi

javascript - 使用函数和返回值设置 "d"时如何修复 d3 解析错误?

转载 作者:行者123 更新时间:2023-11-30 10:19:11 25 4
gpt4 key购买 nike

为简洁起见,我将跳过其他多余的链接方法。请注意,此链中的第一个函数有效。第二个功能,没有。如果我们让它不是函数,d3 很乐意将 arc 分配给 d。我是否缺少有关“d”属性的某些信息,或者这可能是 d3 错误?也许“d”需要一种不同的绑定(bind)方式?

    var arc = d3.svg.arc()
.outerRadius(outerRadius);



var slice = arcs.append("svg:path")
.attr("fill", function(d, i ) {
// this function works fine!!!!
if(someCondition)
{
return "#3AB3F1";
} else if( someOtherCondition)
{
var brightenedColor = colorSpread(sliceArray.length, true)[i];
return brightenedColor;
}
})
.attr("d", function(d, i){
// this throws an error in d3!!!!!
return arc;
})
.style('stroke', 'white').....

但是,如果我不使用某个函数,它会起作用!

...
.attr("d", arc )
...

错误代码:

Error: Problem parsing d="function n(){var n=t.apply(this,arguments),u=e.apply(this,arguments),a=r.apply(this,arguments)+nc,o=i.apply(this,arguments)+nc,c=(a>o&&(c=a,a=o,o=c),o-a),l=Da>c?"0":"1",f=Math.cos(a),s=Math.sin(a),h=Math.cos(o),g=Math.sin(o);return c>=tc?n?"M0,"+u+"A"+u+","+u+" 0 1,1 0,"+-u+"A"+u+","+u+" 0 1,1 0,"+u+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+u+"A"+u+","+u+" 0 1,1 0,"+-u+"A"+u+","+u+" 0 1,1 0,"+u+"Z":n?"M"+u*f+","+u*s+"A"+u+","+u+" 0 "+l+",1 "+u*h+","+u*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+l+",0 "+n*f+","+n*s+"Z":"M"+u*f+","+u*s+"A"+u+","+u+" 0 "+l+",1 "+u*h+","+u*g+"L0,0"+"Z"}" 

最佳答案

d3.svg.arc()创建的对象arc本身就是一个函数,它以pieSlice附加的数据对象为参数,返回路径方向字符串。

所以这样写:

.attr("d", function(d, i){
return arc;
})

相当于写:

.attr("d", function(d, i){
return function(d2, i2){
/* Do stuff here */
};
})

现在在 d3 代码中有时您确实希望一个函数返回另一个函数——但这不是那种情况! D3 期望您的函数返回属性值的字符串,因此 arc 函数被转换为字符串,并被设置为属性值。当然,您的浏览器不知道如何从“function n(){var n=t.apply...”等方向绘制路径,因此它会抛出错误。

相反,当你写的时候

.attr("d", arc )

d3 检查您给它的值 (arc),发现它是一个函数,并用适当的数据和索引为每个元素调用它,arc 函数返回适当的路径方向字符串。

如果您确实需要使用自己的函数,则需要调用 arc 函数并将数据值和索引作为参数。如果饼图数据存储在数据对象的子属性中而不是作为一个整体的数据对象,则可能会发生这种情况。

.attr("d", function(d,i) {

/* calculate something here */

return arc(d.pieData); //return the *result* of the arc function
// NOT the function itself!

})

老实说,在任何情况下,对于饼图数据,我都无法做到这一点(因为您可以只更改 arc 对象上的访问器函数),但您经常会看到折线图的这种结构,您必须在其中获取数据点的子数组以传递给画线函数。

关于javascript - 使用函数和返回值设置 "d"时如何修复 d3 解析错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com