0

我在 GWT HighCharts 图表上的导出按钮中将 GWT 方法连接到菜单项的 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,但我不确定我将如何去做。任何人都可以帮忙吗?

编辑:

显然,在上面的示例中,我试图显示一个 javascript 警报,但如果可能的话,我想调用一个 GWT 实例方法。(静态方法也可以)。

编辑2:

这是导出按钮中我的菜单项的代码:

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)});

编辑 3:

在 HighCharts JS 源代码 (exporting.js) 中,菜单项的 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 功能,但仍然没有成功...

4

2 回答 2

0

传递命令接口而不是字符串

Command sayHello = new Command() {
   public void execute() {
     Window.alert("Hello");
   }
 };
 sayHello.execute();
于 2013-02-25T08:38:48.630 回答
0

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

widget.addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
        Window.alert("clicked!");
    }
});
于 2013-03-02T18:57:30.643 回答