2012-10-09 155 views
47

我無法理解d3.call()如何工作以及何時何地使用它。 Here是我試圖完成的教程鏈接。Javascript庫d3調用函數

能有人請解釋具體是什麼,這一塊是做

var xAxis = d3.svg.axis() 
       .scale(xScale) 
       .orient("bottom"); 

svg.append("g").call(xAxis); 
+0

您提供的鏈接解釋了什麼是'()調用'確實 – Ibu

+9

是啊,但我仍然無法獲得什麼svg.append(「g」).call(xAxis);正在做:( – Andy897

+1

請參閱https://github.com/d3/d3-selection/blob/master/README.md#selection_call –

回答

75

我認爲這裏的關鍵是要明白,X軸是產生一堆SVG元素的功能。實際上它是由d3.svg.axis()返回的函數。 scale和orient函數只是鏈接語法的一部分(請閱讀更多內容:http://alignedleft.com/tutorials/d3/chaining-methods/)。

所以svg.append("g")將SVG組元素附加到svg中,並以選擇(相同鏈式語法在此處)的形式返回對自身的引用。當您在選擇中使用call時,您正在調用名爲xAxis的功能,選擇g的元素。在這種情況下,您正在新創建並附加的組g上運行軸功能xAxis

如果仍然沒有意義,上面的語法相當於:

xAxis(svg.append("g")); 

或:

d3.svg.axis() 
     .scale(xScale) 
     .orient("bottom")(svg.append("g")); 
+0

如何編輯svg.axis()的G元素?我有流血的標籤進入彼此,我想對他們應用轉換。但我似乎無法訪問這些元素 – CQM

+0

檢查答案在這裏http://stackoverflow.com/questions/12825630/assign-ids-to-individual-axis- text-elements/12849772#12849772選擇文本或刻度元素後,如果需要,應該可以應用變換。 – Superboggly

+0

在調用xAxis時是否有區別? – st4rgut