首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DukeScript:本机调用到JavaScript是如何工作的?

DukeScript:本机调用到JavaScript是如何工作的?
EN

Stack Overflow用户
提问于 2015-06-03 22:32:29
回答 1查看 240关注 0票数 0

我很难理解DukeScript中的“本机方法”调用是如何工作的。特别是在@JavascriptBody注释中没有指定主体的部分。例如

代码语言:javascript
复制
@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”的包装器。

不带体的本机方法调用的另一个示例是这里

代码语言:javascript
复制
@JavaScriptResource("jquery-1.11.0.min.js")
public class JQuery {

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

那么,在这个例子中,"init()“是什么?它是Java方法还是JavaScript函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-11 05:15:28

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

代码语言:javascript
复制
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资源的负载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30631969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档