代码之家  ›  专栏  ›  技术社区  ›  Nosredna

我可以使用GWT(或脚本γ)来编写Java(C语言)中的单个函数,并将它们编译成JavaScript吗?

  •  4
  • Nosredna  · 技术社区  · 15 年前

    我理解GWT的目的,但我想知道我是否可以使用它来从Java到JavaScript编译一些函数,以确保我不必用两种不同的语言来维护相同的代码。

    或者GWT会带来太多的库/支持开销,从而使这成为一个合理的选择吗?

    对于未来的项目,我对脚本(C编译器)有同样的问题。


    跟进:

    脚本* seems to produce very readable JavaScript 来自C(第35-51页有一些C代码和生成的JS代码的示例)。

    我发现有一个 -STYLE 使GWT输出“漂亮”甚至“详细”的标志。我仍然不知道发出的JS是否依赖大型库,或者是否涉及其他“gotchas”。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Robert Munteanu    15 年前

    是的,你可以这样做。下面是从javascript调用它的方法( Source ):

    如何从我的应用程序主页调用我的GWT Java方法之一?

    为了做到这一点,你将 首先需要创建一个JSNI方法 创建一个javascript方法, 依次调用您的Java 方法。在GWT应用程序中 onModuleLoad(),您可以调用它 jsni方法使javascript 方法已定义。从你 应用程序主机页 调用创建的javascript方法。

    迷惑了吗?实际上相当不错 简单。

    下面的代码段显示了 示例(由罗伯特提供 汉森):

    private native void initPlaylistJS  (PlaylistTable pl) /*-{   
       $wnd.addClipToPlaylist = function (clipId, clipTitle) {
            pl.@com.foo.bar.client.PlaylistTable::addClip(Ljava/lang/String;Ljava/lang/String;)(clipId, clipTitle);
        };
    }-*/;
    

    在这个例子中,您需要 在中调用initplaylistjs(pl) 您的GWT模块的onModuleLoad()。一次 您的GWT应用程序加载 定义了javascript方法,并且 可从GWT外部调用 应用。

    至于“baggage”,GWT编译一个单一的单片文件,因此您不需要包括任何其他内容。


    另外需要注意的一点是,在我的经验中,GWT并不完全适合在服务器和客户机之间共享代码,因为服务器部分需要成为GWT可编译的,即只包含属于 emulated JRE 或者您有可供编译的源代码。

        2
  •  0
  •   Vinay Sajip    15 年前

    GWT不是一个通用的Java到JavaScript转换器,虽然它为Web应用程序(当然是GWT小部件)转换了JRE的有用部分。仅仅为了避免用JavaScript进行编码,对于“少数”函数来说,这并不真正值得使用。当然,如果您正在构建一个复杂的UI,它因此涉及到复杂的JavaScript编码,那么GWT真的会发光。如果编写Java方法来帮助实现GWT事件处理的逻辑,那么这些将与其他所有的内容一起转换为JavaScript函数。然而,GWT的主要优点是在托管模式下调试用户界面是多么简单和自然——这是主要的生产力提高(以及桌面应用程序开发人员对小部件API的熟悉程度)。

        3
  •  0
  •   Steve Armstrong    15 年前

    如果您已经用javascript实现了函数,那么 Rhino 在服务器端的JVM中执行JavaScript代码有意义吗?

    推荐文章