我很难理解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函数?
发布于 2015-06-11 05:15:28
我完全理解为什么代码看起来很神奇。但是,如果您试图注释掉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.register是由knockout.js资源文件定义的。方法名registerComponent可以是任意的,只需要触发knockout.js资源的负载。
https://stackoverflow.com/questions/30631969
复制相似问题