2017-07-17 61 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(...