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实际上你可以“只在一个图表中添加一个按钮”,见我上面的答案。谢谢!你救了我一天!