【问题标题】:Can I use GWT (or Script#) to write individual functions in Java (or C#) and compile them to JavaScript?我可以使用 GWT(或 Script#)在 Java(或 C#)中编写单个函数并将它们编译为 JavaScript 吗?
【发布时间】:2009-07-15 17:25:15
【问题描述】:

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

或者 GWT 是否会带来过多的库/支持开销,从而使其成为一个合理的选择?

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


跟进:

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

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

【问题讨论】:

    标签: javascript gwt script#


    【解决方案1】:

    是的,您可以这样做。这是从 Javascript (Source) 调用它的方法:

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

    为了实现这一点,您将 首先需要创建一个JSNI方法 创建一个 JavaScript 方法 反过来调用你的 Java 方法。在您的 GWT 应用程序的 onModuleLoad(),你可以称之为 JSNI 方法使 JavaScript 方法已定义。从你的 应用程序主机页面,然后 调用创建的 JavaScript 方法。

    困惑了吗?其实挺 很简单。

    下面的代码 sn-p 显示了一个 这方面的例子(由罗伯特提供 汉森):

    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 可编译的,即只包含属于 @ 的类987654322@ 或您有可用于编译的源代码。

    【讨论】:

    • 但是如果代码是逻辑/浮点重,它可能只使用 JRE 的子集,因此更可能兼容。
    【解决方案2】:

    GWT 不是通用的 Java 到 JavaScript 转换器,尽管它可以将 JRE 的有用部分转换为 Web 应用程序(当然还有 GWT 小部件)。仅仅为了避免在 JavaScript 中编码,它真的不值得用于“少数”功能。当然,如果您正在构建一个复杂的 UI,从而涉及复杂的 JavaScript 编码,那么 GWT 真的很出色。如果您编写 Java 方法来帮助实现 GWT 事件处理的逻辑,那么这些方法将与其他所有内容一起转换为 JavaScript 函数。然而,GWT 的主要好处是在托管模式下调试 UI 是多么容易和自然 - 这是主要的生产力提升(以及桌面应用程序开发人员对小部件 API 的熟悉度)。

    【讨论】:

    • 这并不能真正回答我的问题。我知道 GWT 是干什么用的。我想知道的是,如果我编译两个或三个中等大小的函数,这些函数对逻辑和浮点数学很重(在我的例子中),会发生什么。我已经在 J​​avaScript 中有这些,但我在服务器上也需要它们,我不想单独维护它们。那么当 GWT 将一个函数编译成 JavaScript 时,有什么缺点呢?它会带来一个大图书馆吗?如果我有一个 Java 函数,比如 40 行逻辑(不是接口的东西),编译后我在 JavaScript 端会得到什么?
    【解决方案3】:

    如果您已经在 javascript 中实现了这些功能,那么像 Rhino 这样的东西在服务器端的 JVM 中执行 Javascript 代码是否有意义?

    【讨论】:

    • 一个好主意。我仍然想知道用 GWT 编译的 Java 函数是什么样子的。我想我会试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多