首页 文章

在GWT HighCharts中导出按钮menuitem的钩子GWT方法

提问于
浏览
0

我无法在GWT HighCharts图表的导出按钮中将GWT方法挂钩到menuitem的onclick方法 .

我已成功将自定义菜单项添加到导出按钮,但不知道设置onclick方法的语法 . 我试过了:

setOption("onclick", "window.alert('Test')");

setOption("onclick", "function() { window.alert('Test') }");

但是我收到以下错误:

Uncaught JavaScript exception [TypeError: a.onclick.apply is not a function]...

因此,它试图调用我放入onclick字符串的任何东西,但显然它不是我正在使用的正确语法 . 我一直在考虑JSNI,但我不确定我会如何去做 . 有人可以帮忙吗?

EDIT:

显然,在上面的例子中,我试图显示一个javascript警报,但我想在可能的情况下调用GWT实例方法 . (静态方法也可以) .

EDIT 2:

这是我的“导出”按钮中的menuitem的代码:

private class ExportButtonMenuItem extends Configurable<ExportButtonMenuItem> {

    public ExportButtonMenuItem(String name, String type) {
        setOption("text", name);

        if (type.equalsIgnoreCase(EXPORT_EXCEL)) {
            // setOption("onclick", "window.alert('Test')");

            // does not work!
            setOption("onclick", new Command() {
                @Override
                public void execute() {
                    GWT.log("export!!!");
                }
            });
        }
    }
}

这就是菜单项添加到图表的方式:

chart.setOption("/exporting/buttons/exportButton/menuItems", 
    new ExportButtonMenuItem[] { 
        new ExportButtonMenuItem("Download PNG", ExportButtonMenuItem.EXPORT_PNG), 
        new ExportButtonMenuItem("Download JPEG", ExportButtonMenuItem.EXPORT_JPEG), 
        new ExportButtonMenuItem("Download PDF", ExportButtonMenuItem.EXPORT_PDF),
        new ExportButtonMenuItem("Download SVG", ExportButtonMenuItem.EXPORT_SVG),
        new ExportButtonMenuItem("Download Excel", ExportButtonMenuItem.EXPORT_EXCEL)});

EDIT 3:

在HighCharts JS源代码(exports.js)中,调用menuitem的onclick方法如下:

div[hasTouch ? 'ontouchstart' : 'onclick'] = function () {
    hide();
    item.onclick.apply(chart, arguments);
};

调用apply时,我收到此错误:

[java] Uncaught JavaScript exception [TypeError: item.onclick.apply is not a function] in http://127.0.0.1:8888/js/modules/exporting.src.js, line 467

我一直试图覆盖onclick功能,但仍然没有成功......

2 回答

  • 0

    传递Command接口而不是String

    Command sayHello = new Command() {
       public void execute() {
         Window.alert("Hello");
       }
     };
     sayHello.execute();
    
  • 0

    事件处理程序不包含在HighCharts API中作为选项,但您可以使用纯GWT将此类处理程序附加到包装窗口小部件:

    widget.addClickHandler(new ClickHandler() {
    
        @Override
        public void onClick(ClickEvent event) {
            Window.alert("clicked!");
        }
    });
    

相关问题