DukeScript:对 JavaScript 的原生调用是如何工作的?
DukeScript: How do native calls into JavaScript work?
我很难理解 "native method" DukeScript 中的调用是如何工作的。
特别是在 @JavascriptBody 注释中没有指定主体的那些。 For example:
@JavaScriptResource(value = "userEntryComponent.js")
public final class UserEntryWidget {
private UserEntryWidget() {
}
@JavaScriptBody(args = {}, body = "")
public static native void registerComponent();
}
"registerComponent()"方法在哪里定义的?
在 knockout 中有一个名为 "ko.components.register" 的 javascript 函数。
所以 "registerComponent" 一定是 "ko.components.register".
的一种包装器
没有主体的本机方法调用的另一个示例是 here:
@JavaScriptResource("jquery-1.11.0.min.js")
public class JQuery {
@JavaScriptBody(args = {},body="")
public static native void init();
}
那么,在这种情况下,"init()" 是什么?它是 Java 方法还是 Java 脚本函数?
我完全理解为什么代码看起来很神奇。但是,如果您尝试注释掉 init 方法,您应该会在 javac complication:
期间看到错误
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.register由knockout.js资源文件定义。方法名称 registerComponent 可以是任意的,它只是为了触发 knockout.js 资源的加载。
我很难理解 "native method" DukeScript 中的调用是如何工作的。 特别是在 @JavascriptBody 注释中没有指定主体的那些。 For example:
@JavaScriptResource(value = "userEntryComponent.js")
public final class UserEntryWidget {
private UserEntryWidget() {
}
@JavaScriptBody(args = {}, body = "")
public static native void registerComponent();
}
"registerComponent()"方法在哪里定义的? 在 knockout 中有一个名为 "ko.components.register" 的 javascript 函数。 所以 "registerComponent" 一定是 "ko.components.register".
的一种包装器没有主体的本机方法调用的另一个示例是 here:
@JavaScriptResource("jquery-1.11.0.min.js")
public class JQuery {
@JavaScriptBody(args = {},body="")
public static native void init();
}
那么,在这种情况下,"init()" 是什么?它是 Java 方法还是 Java 脚本函数?
我完全理解为什么代码看起来很神奇。但是,如果您尝试注释掉 init 方法,您应该会在 javac complication:
期间看到错误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.register由knockout.js资源文件定义。方法名称 registerComponent 可以是任意的,它只是为了触发 knockout.js 资源的加载。