0

我正在努力理解 DukeScript 中的“本机方法”调用是如何工作的。特别是在 @JavascriptBody 注释中没有指定正文的那些。例如

@JavaScriptResource(value = "userEntryComponent.js")
public final class UserEntryWidget {

    private UserEntryWidget() {
    }

    @JavaScriptBody(args = {}, body = "")
    public static native void registerComponent();
}

“registerComponent()”方法在哪里定义?在淘汰赛中有一个名为“ko.components.register”的javascript函数。所以“registerComponent”必须是“ko.components.register”的一种包装。

另一个没有正文的本机方法调用示例如下:

@JavaScriptResource("jquery-1.11.0.min.js")
public class JQuery {

    @JavaScriptBody(args = {},body="")
    public static native void init();   
}

那么,在这种情况下,什么是“init()”?它是 Java 方法还是 JavaScript 函数?

4

1 回答 1

1

我完全理解为什么代码看起来很神奇。但是,如果您尝试注释掉init方法,您应该会在javac复杂化期间看到错误:

COMPILATION ERROR : 
-------------------------------------------------------------
JQuery.java:[10,8] At least one method needs @JavaScriptBody
annotation. Otherwise it is not guaranteed the resource will
ever be loaded

错误行是使用@JavaScriptResource的行。init方法定义真的是空的,什么也不做。但是一旦被调用,它就会强制加载@JavaScriptResource中定义的资源。

在淘汰赛的情况下,ko.components.registerknockout.js资源文件定义。方法名registerComponent可以是任意的,它只是用来触发knockout.js资源的加载。

于 2015-06-11T05:15:28.813 回答