2015-07-02 15 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方式也可以访问这些内容)文本内容是使用坐标轴显示的实际文本,这就是这里正在被分成几行的内容