我可能有某种脑损伤,因为像这样的事情应该是微不足道的。
我手动渲染了一堆svg圆圈(通过React)。然后我将d3拖动行为附加到所有这些行为。应用了拖动行为并且正在执行拖动功能,但是当我拖动其中一个圆圈时,我无法做出相应的响应,因为我不知道它们中的哪一个被移动了。 我在哪里可以获取拖动元素的ID ?
我已经检查了一些其他问题,发现了一些疯狂的过滤器解决方案......不可能。
我还偷看了docs并找到了subject
属性..然而,在我尝试过的地方,那个是空的。
我的代码:
componentWillUpdate() {
let nodes = d3.selectAll("circle");
const dragFn = (d,i) => {
d3.event.sourceEvent.stopPropagation();
this.props.onNodeDrag(I_NEED_AN_ID_HERE);
}
const dragBehavior = d3.behavior.drag();
dragBehavior.on('drag', dragFn);
dragBehavior.on('dragstart', () => {
d3.event.sourceEvent.stopPropagation();
});
nodes.call(dragBehavior);
}
答案 0 :(得分:4)
我不知道你的“this”在函数内部是什么,但在普通的js中,你可以获得html元素的任何属性:
d3.select(this).attr("id"); //or class etc.
或者如果它被包裹
d3.select(this).select("circle").attr("id");
以下是一个示例:http://jsfiddle.net/a2QpA/343/