如何添加/访问从GWT编译的JS到/在另一个外部html / JS项目中

时间:2015-03-13 06:09:36

标签: javascript gwt

我的任务是将gwt项目(不包括HTML CSS)编译成JS文件,并将其添加到外部JS / HTML文件(在不同的项目中)。

这是必须编译的java代码: 1.客户类:

 package com.dell.supportassist.gwt.collectionReport.client;

import org.timepedia.exporter.client.Export; import org.timepedia.exporter.client.Exportable;

@Export( “HelloWorld” 的) 公共类HelloWorld实现Exportable {

public String sayHello(){
    return "Hello";
}

}

  1. EntryPoint类:

    package com.dell.supportassist.gwt.collectionReport.client;

  2. import org.timepedia.exporter.client.Export; import org.timepedia.exporter.client.Exportable;

    @Export( “HelloWorld” 的) 公共类HelloWorld实现Exportable {

    public String sayHello(){
        return "Hello";
    }
    

    }

    我的问题是,一旦上面的gwt项目/类被编译,我想在ma外部javascript中访问'sayHello()'方法,如下所示:

    var person = hello.sayHello();
            system.log(person);
    

    但是这会抛出一个运行时错误,说'hello'没有定义。

    P.S我试图在外部HTML中使用GWT编译的JS,在Durandaljs Framework中使用JS。

1 个答案:

答案 0 :(得分:0)

很长一段时间没有做过这种事情,但你可以使用JSNI实现这一点,它允许你在GWT中编写本机JS。从JSNI您可以参考您的GWT方法。这样你就可以定义一个函数(在窗口上,最典型的是),这个函数随后可用于常规JS。从这个JSNI方法中,您可以引用您的GWT / Java代码。

代码示例:

public class MyModule implements EntryPoint {
    static {
        export();
    }

    /**
     * Makes our setData method accessible from plain JS
     */
    private static native void export() /*-{
        $wnd.setData = @my.package.MyModule::setData(Lcom/google/gwt/core/client/JavaScriptObject;);
    }-*/;

    private static void setData(JavaScriptObject javaScriptObject) {
        // this method is now reachable as window.setData
    }
}