2014-03-28 40 views
0

http://jsfiddle.net/kWhF7/6/D3的.CALL()傳遞不正確地選擇在當前選擇的div

的開始的選擇是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

documentation

調用操作總是返回當前的選擇,無論指定函數的返回值。

也就是說,您的預期用途明確無效。 jsfiddle中未註釋的代碼是正確的方式。

+0

我們希望返回已更改的選擇,因爲以下.call()期望選擇是svg而不是div。如果我們按照上述說明進行操作,則必須重新配置其他所有選項.call()函數首先過濾選擇。 – dcryan22

+0

但在不同的筆記上,爲什麼selection.call(createSVGCanvas)失敗並createSVGCanvas(選擇)工作? – dcryan22

+0

啊,我糾正了。我會更新答案。 –