Javascript 自定义Highcharts上下文菜单按钮出现在页面上的每个图表中

Javascript 自定义Highcharts上下文菜单按钮出现在页面上的每个图表中,javascript,highcharts,Javascript,Highcharts,我有一个包含多个图表的页面,我需要能够为每个图表的导出上下文菜单添加特定选项。这是我正在使用的代码: myChart.options.exporting.buttons.contextButton.menuItems.push({ text: "Custom Option", onclick: someFunction }); 不幸的是,这会将选项添加到每个图表,而不仅仅是图表myChart引用。我希望能够添加一个选项,并使其仅出现在一个图表上 这是一把

我有一个包含多个图表的页面,我需要能够为每个图表的导出上下文菜单添加特定选项。这是我正在使用的代码:

myChart.options.exporting.buttons.contextButton.menuItems.push({
        text: "Custom Option",
        onclick: someFunction
    });
不幸的是,这会将选项添加到每个图表,而不仅仅是图表myChart引用。我希望能够添加一个选项,并使其仅出现在一个图表上

这是一把小提琴,它展示了:


谢谢

查看更新后的小提琴演奏结果:

您只需将纽约图表标记为启用导出的false,如下所示:

    exporting: {
        enabled: false
    }

要添加按钮,请使用图表选项。然后,您可以为每个图表设置不同的选项集:

获取默认按钮:

var buttons = Highcharts.getOptions().exporting.buttons.contextButton.menuItems;

buttons.push({
    text: "Tokyo Only Option",
    onclick: HelloWorld
});
并将其设置为图表:

exporting: {
    buttons: {
        contextButton: {
            menuItems: buttons // or buttons.slice(0,6)
        }
    }
},

我发现了另一种可能,只将其添加到一个图表中。将以下内容添加到要扩展关联菜单的图表中

       exporting: {
            buttons: {
                contextButton: {
                    menuItems: [

                    ]
                }
            }
        },
。 现在,您可以使用如下方法动态扩展图表

 function (button) {
    var userMenu = this.chart.userOptions.exporting.buttons.contextButton.menuItems;
    if (userMenu.length === 0) {
        var menuItems = Highcharts.getOptions().exporting.buttons.contextButton.menuItems;
        for (var itemIndex in menuItems) {
            userMenu.push(menuItems[itemIndex]);
        }
    }
    userMenu.push(button);
};

。从PawełFus answer开始,当this.chart指向应该扩展哪个上下文菜单的图表时,我找到了一个更简洁的解决方案。主要的问题是,您不需要处理原始对象并扩展它。相反,你最好克隆它。请注意,我的解决方案需要jQuery

function appendExportButton(mytext, myfunction){
  var defaultButtons = Highcharts.getOptions().exporting.buttons; // get default Highchart Export buttons
  var myButtons = $.extend(true, {}, defaultButtons);
  myButtons.contextButton.menuItems.push({
    text: mytext,
    onclick: myfunction
  });
  return {buttons: myButtons};
}
要在所需图表中插入此按钮,请按以下方式定义图表:

var mychart = new Highcharts.Chart({
  chart: {
    ...whatever...
  },
  plotOptions: {
    ...whatever...
  },
  series: {
    ...whatever...
  },
  exporting: appendExportButton("Save data in CSV format", saveCSV)
});
在OP问题的情况下,这是您必须使用的行:

exporting: appendExportButton("Tokyo Only Option", HelloWorld)

这有点微妙,但谢谢,它很管用。我唯一能让它工作的方法就是:创建一个包含所有按钮的数组,然后强制它在其中一个图表上少渲染一个按钮。你不能“只在一个图表中添加一个按钮”,你必须从一个图表中“只删除你不想要的按钮”。@philw实际上你可以“只在一个图表中添加一个按钮”,见我上面的答案。谢谢!你救了我一天!