我试图为网络的每个边缘定义一个ID。
(...).enter().append("svg:line")
.attr("class", "edge")
.attr("id", function(d) {
console.log(d);
return "still a test";
});
代码打印:
Object { label: "MB2 (pp) NEK6", source: Object, target: Object, value: 1 }
Source和Target属性包含具有属性的对象(它们是网络的节点),包括属性" id"。 但是当我使用:
console.log(d.target.id);
它返回" undefined"并在运行时:
console.log(d.target);
它返回一个数字,我认为它与属性" index"有关。存储在d.target中的对象。
我不明白为什么d返回一个带对象的对象(OK)而d.target似乎返回一个数字(Not OK),因此,d.target.id不会返回目标id。 / p>
我错过了什么?感谢
答案 0 :(得分:1)
我猜测您正在使用强制布局或类似内容,而您的原始数据包含每个链接的源和目标ID。运行强制布局时会发生的情况是,这些数字引用会被解析为实际的节点对象。
当你执行console.log()
时,这并没有发生,这意味着原始ID仍在那里,而不是对象。
日志显示不同的原因是,当您单击它们以检查成员时,将解析记录的对象。也就是说,console.log()
没有显示记录时的内容,但是现在看看它是什么。到发生这种情况时,源ID和目标ID已被对象替换。
要修复,请在对要记录的对象进行操作之前启动强制布局。