2017-07-17 52 views
1

我有數據的數組,如果我想使這個數據爲文本,我將使用一個代碼d3.js如何將當前選擇傳遞給.each()回調?

footer_item = svg_selection.append('g') 
    .attr('class', 'footer_data') 
    .selectAll('g') 
    .data(data) 
    .enter() 
    .append('g') 

footer_item.append('text') 
    .text((d) => d) 
    ... 

如果不是文本的我想提請一些形狀是什麼。我可以用這個辦法

footer_item 
    .each((d) => { 
    // draw some shape 
    // don't know how to refer to footer_pointer 
    draw_my_shape(footer_item_pointer, d.x, d.y); 
    }) 

function draw_my_shape(footer_item_pointer, x, y){ 

    footer_item_pointer 
     .append('circle') 
     .attr('cx', x) 
     .attr('cy', y) 
     ... 
} 

唯一的問題這種方法我將失去指針footer_item。我需要指向footer_item以在g元素內繪製我的形狀。

是否可以將footer_item指針與.each()函數發送給我的繪製回調函數?

我可以使用.call()函數嗎?我嘗試過,但隨後d變量將包含完整的選擇和完整的數據。我會再次回到我開始的地方。

+0

您可以通過用箭頭功能,在功能使用的this範圍值做到這一點你爲什麼認爲你失去了你的參考?鑑於你提供的代碼,我可以看到沒有證據支持這一假設。 – altocumulus

+0

我更新了我的問題。你能再看看這個問題嗎? – Raf

回答

1

如果我理解正確,你想在each函數裏面訪問footer_item

footer_item.each(function(d, i) { 
     //"this" refers to the <g> html element that footer_item points to 
     var foo = d3.select(this); 
    }); 

然後,您可以借鑑一下,選擇的頂尖一些形狀:

foo.append('circle').attr(... 
foo.append('rect').attr(...