2015-07-02 19 views
0

我想了解一個由mbostock包裝長文本標籤的d3代碼塊。包裝文本,使用通話功能傳遞數據

完整的示例和代碼:http://bl.ocks.org/mbostock/7555321

這個例子上被引用此之前,但我無法理解「.tick」級怎麼還可以選擇並傳遞到一個文本元素「包裝「功能。

svg.append("g") 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + height + ")") 
    .call(xAxis) 
.selectAll(".tick text")  //text selected here 
    .call(wrap, x.rangeBand()); //wrap function called here 

function wrap(text, width) { 
    text.each(function() { 
    var text = d3.select(this), 
     words = text.text().split(/\s+/).reverse(), //text manipulated here 

我認爲,當「x軸()」被調用,那麼秤(x)時數據被附加了「名」,但我不明白這些數據如何被傳遞和訪問的「wrap()」函數。

回答

1

軸組件在調用時會創建特定的結構。特別是,它會創建text元素與類tick,並將代表刻度值的數據綁定到它們。在代碼中使用的.call()函數實際上通過整個選擇(在這種情況下text元件) to the function given as argument. This is文本argument in the wrap`功能。

.each()呼叫內wrap()然後遍歷所有的那些元素。d3.select(this)選擇每個元件和.text()訪問該元素的文本內容(還有其他非D3方式也可以訪問這些內容)文本內容是使用座標軸顯示的實際文本,這就是這裏正在被分成幾行的內容