Javascript 如何将对象传递到d3上下文菜单动态菜单列表
对于项目,我使用以下关联菜单: “动态菜单列表”()允许将菜单作为函数写入。这个很好用。但是,函数approch允许将数据传递到菜单,以区别要显示的项目 我调用D3树布局中的菜单,如下所示:Javascript 如何将对象传递到d3上下文菜单动态菜单列表,javascript,d3.js,Javascript,D3.js,对于项目,我使用以下关联菜单: “动态菜单列表”()允许将菜单作为函数写入。这个很好用。但是,函数approch允许将数据传递到菜单,以区别要显示的项目 我调用D3树布局中的菜单,如下所示: nodeEnter.append("circle") .attr('class', function(d) { return 'nodeCircle ' + d.state;}) .attr("r", 0) .style("fill", function(d) {
nodeEnter.append("circle")
.attr('class', function(d) {
return 'nodeCircle ' + d.state;})
.attr("r", 0)
.style("fill", function(d) {
return d._children ? "lightsteelblue" : "#fff";
})
.on("mouseover", function(d) {
show_tooltip(d);
})
.on("mouseout", function(d) {
hide_tooltip(d);
})
.on("contextmenu", d3.contextMenu(node_menu)
);
这是可行的,但我想将“d”传递给“node\u menu”
我已经尝试过的:
d3.上下文菜单(节点菜单(d))
=>“d”只是值“1”
=>完全不显示上下文菜单,如果我添加return也不显示
如何将“d”对象传递给“node\u menu”函数?
编辑:
“节点菜单”功能可能有帮助:
var node_menu = function (data) {
console.log('data:');
console.log(data);
if (data.depth == 6) {
return node_menu_v1;
}
else{
return node_menu_v2;
}
};
在
数据
数组内部或外部创建多个菜单结构
var data = [
{v: 1, menu: menu1},
{v: 2, menu: menu2},
{v: 3, menu: menu3}
];
...
.on('contextmenu', function(d) { d3.contextMenu(d.menu)(d);} );
谢谢你,这正是我需要知道的,“(d)”起作用了。我的工作代码现在是:.on(“contextmenu”,函数(d){d3.contextmenu(node_menu(d))(d);})@Seb取决于菜单变量,它是数组还是function@gerardo-另外,我知道你指的是哪一行代码。但是,如果我只是将“node_menu”函数传递给d3.contextMenu(),则“node_menu”函数中的“data”值仅为“1”。当用户选择某个操作时,我可以访问“数据”,因为它通过
d.action(elm,data,index)行传递代码>但如果没有提供的解决方案@riov8,我无法根据“数据”显示不同的菜单。或者至少我不知道怎么做。这只是一个静态菜单数组,而不是像这里这样的动态菜单函数:你的编辑和链接让它更清晰。好的,谢谢。很抱歉,我造成了一些混乱,下次我会尽量讲清楚的。
var data = [
{v: 1, menu: menu1},
{v: 2, menu: menu2},
{v: 3, menu: menu3}
];
...
.on('contextmenu', function(d) { d3.contextMenu(d.menu)(d);} );