0

DukeScript の「ネイティブ メソッド」呼び出しがどのように機能するかを理解するのに苦労しています。特に、@JavascriptBody アノテーションに body が指定されていないもの。:

@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.registerは、 knockout.jsリソース ファイルによって定義されます。メソッド名registerComponentは任意です。これは、knockout.jsリソースのロードをトリガーするためのものです。

于 2015-06-11T05:15:28.813 に答える