2015-09-25 72 views
1

匿名函数内部存在声明变量,当返回该变量时。问题是我似乎无法使用该变量,因为当我尝试返回它时,firebug表示:TypeError: myData is undefinedD3。匿名函数中的变量声明


这是我的代码:

select("circle") 
    .transition() 
    .attr("r", function(d) { 
       var myData = d3.select(this).datum(); 
       return myData[0]; 
    }) 
    .duration(1000); 

return myData[0];确实返回第一个数组元素,但我的动画需要不到1秒,这意味着.duration(1000);不会被调用,因为有一个错误在那return myData[0];,这是有点令人费解。

这就是我附上数据到圈子之前制作动画的尝试:

var valuesMatrix = []; 
    valuesMatrix[0] = [35, 21, 45, 71, 51, 32]; 

    d3.selectAll("circle") 
    .data(valuesMatrix); 

为什么return myData[0];被认为是像未申报的,即使它返回有效值。


更新。按矩形看圆形动画:

var svgContainer = d3.select("body").append("svg") 
            .attr("width", 200) 
            .attr("height", 200); 

svgContainer.append("circle") 
         .attr("cx", 40) 
         .attr("cy", 40) 
         .attr("r", 20); 

var valuesMatrix = []; 
    valuesMatrix[0] = [35, 21, 45, 71, 51, 32]; 

svgContainer.selectAll("circle") 
    .data(valuesMatrix); 

svgContainer.append("rect") 
        .attr("x", 90) 
        .attr("y", 10) 
        .attr("width", 80) 
        .attr("height", 20) 
        .on("click", function(d) { 
          var selectedGroups = d3.selectAll("circle") 
           .transition() 
           .attr("r", function(d) { 
            var myData = d3.select(this).datum(); 
            // return d[0]; 
            return myData[0]; 
           }) 
          .duration(2000); 
        }); 

此代码是jsfiddle - ready。 这似乎是工作

http://jsfiddle.net/regpast123/axkbLp45/2/

+1

你可以把它放在小提琴上。 – Cyril

+0

你只需要'return d [0];'。错误消息表明您没有将任何数据绑定到您选择的元素。 –

+0

我刚刚将它上传到jsfiddle,它似乎在工作,那么我的环境出现问题。你可以在说明中找到链接 – Benas

回答

2

错误消息表明您还没有绑定任何数据到你选择的元素。此外,你可以简化代码:

.attr("r", function(d) { return d[0]; });