javascript - 如何将对象传递给 d3-context-menu 动态菜单列表

标签 javascript d3.js

对于一个项目,我使用这个上下文菜单:https://www.npmjs.com/package/d3-context-menu

“动态菜单列表”(https://www.npmjs.com/package/d3-context-menu#dynamic-menu-list)允许将菜单编写为函数。这很好用。但是,函数 approch 允许将数据传递到菜单以区分要显示的项目。

我像这样在 D3 树布局中调用菜单:

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_menu”。

我已经尝试过的:

d3.contextMenu(node_menu(d))

=> "d"只是值 "1"

.on("contextmenu", function(d) {
        d3.contextMenu(node_menu(d));
    })

=> 根本不显示上下文菜单,如果我添加 return 也不显示

如何将“d”对象传递给“node_menu”函数?

编辑:
也许有帮助,“node_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;
    }
};

最佳答案

data 数组内部或外部创建多个菜单结构。

var data = [
  {v: 1, menu: menu1},
  {v: 2, menu: menu2},
  {v: 3, menu: menu3}
];
...
.on('contextmenu', function(d) { d3.contextMenu(d.menu)(d);} );

关于javascript - 如何将对象传递给 d3-context-menu 动态菜单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54665328/

相关文章:

javascript - 无法使用 Angular 指令将参数传递给函数

javascript - 使用 Jasmine 测试隔离范围时出现意外的变量类型

javascript - D3 圆圈包中单独的鼠标单击圆圈和背景

javascript - 捕获 X 轴值 NVD3 堆积面积图

c# - 通过数组作为 $ajax 参数 MVC

javascript - 在 Deno 中创建 Rest API

javascript - 如何在 native react 中限制文本字段的退格事件

javascript - 为冰柱可视化添加尺寸

javascript - 如何实现点从a到b的移动过渡

javascript - d3 js换行符在使用html的文本中不起作用