当前选择为div时,d3的.call()传递错误的选择

时间:2014-03-28 02:51:32

标签: javascript svg d3.js

http://jsfiddle.net/kWhF7/6/

开始选择是div容器元素。

function chart(selection)
{
    createSVGCanvas(selection)// <----  Works
    //selection.call(createSVGCanvas) // <----  Doesn't Work
    .call(calculateScales) 
    .call(dataLayer)

    return this;
}

function createSVGCanvas(selection)
{
    //This properly returns an svg element, but in the broken version
    // the NEXT .call'd function (calculateScales), has a selection of the
    // div#svg_canvas, NOT the svg.

    return selection.append("svg")
      .attr("width", config.width)
      .attr("height", config.height);
}

在我看来,当前选择是div(或者不是svg元素)时,d3的.call函数似乎将错误的元素传递给下一个.call函数。

我绝对可以使用工作版本,但破坏的版本看起来更像是d3编码风格。

关于为什么下一个.Call函数正在接收div而不是svg?

的任何解释

1 个答案:

答案 0 :(得分:1)

来自documentation

  

无论指定函数的返回值如何,调用运算符始终返回当前选择。

也就是说,您的预期用途显然不会起作用。 jsfiddle中未注释的代码是正确的方法。