參見Inline Labels在D3 V4.0.0-α9,這在D3版本基準()4不能訪問綁定元素
label.append("rect", "text")
.datum(() => this.nextSibling.getBBox())
.attr('x', d => (d.x - labelPadding))
.attr('y', d => (d.y - labelPadding))
.attr('width', d => (d.width + (2 * labelPadding)))
.attr('height', d => (d.height + (2 * labelPadding)));
它將附加一個矩形由接入該元件爲文本數據內()通過這個。
爲每個系列中的每個點呈現標籤。在這個標籤下面,添加了一個白色的矩形,它的大小和位置是使用element.getBBox加上一點點的填充自動計算出來的。由此產生的標籤是易讀的
根據D3 v3 set datum,我們應該創建一個新的選擇,不綁定到以後在版本4中使用的數據(例如v4.7.4)。我試圖創建像以下新的選擇,但在基準看起來bbox被單個對象而不是多個對象應該是循環通過如上述代碼在D3 V4.0.0-α9.
const newText = label.selectAll('text');
const bbox = newText.node().getBBox();
label.append('rect', 'text')
.datum(() => bbox)
.attr('x', d => (d.x - labelPadding))
.attr('y', d => (d.y - labelPadding))
.attr('width', d => (d.width + (2 * labelPadding)))
.attr('height', d => (d.height + (2 * labelPadding)));
謝謝你的解釋,這* *仍然指向數據()綁定元素的版本爲V4.0.0,alpha.9的,但不是v4.7.4,可我知道如何讓我得到了相同的功能數據在v4.0.0-alpha.9中轉換爲v4.7.4中的數據?它總是給我錯誤關於無法getBBox()從空對象。謝謝 –
這與'datum'函數無關,這是相同的。如果您使用的是v4.7,請使用'insert'而不是'append',因爲文本必須是rects的**下一個**兄弟。下面是使用V4.7塊:http://blockbuilder.org/anonymous/a55daaaeffa8de6fc271157014695d3a –
是的,你的例子顯示了我我需要什麼。之後予替換'append'與'insert',我發現,它仍然沒有工作,直到我取代.datum的'(()=> this.nextSibling.getBBox())'行至'.datum(()的函數{return this.nextSibling.getBBox();})'。數據中的箭頭函數看起來不像我期望的那樣工作。箭頭函數中的'this'是空對象。你能清除我的疑問嗎?謝謝。 –