2016-05-26 12 views
0

JsInteropの問題を抱えていますが、いくつかのJavaScriptコードをラップしています。GWT JsInteropネイティブクラスの問題

JavaScriptがJsInteropクラスがある

com = { gwidgets: {} }; 
com.gwidgets.Spring = function() { 
     this.name = "hello";  
}; 

com.gwidgets.Spring.prototype.getName = function() {return "test"; 
}; 

のようなものです。しかし

package com.gwidgets.leaflet; 

import jsinterop.annotations.JsMethod; 
import jsinterop.annotations.JsType; 

@JsType(isNative=true) 
public class Spring { 

    @JsMethod 
    public native String getName(); 
} 

、私はクラスをインスタンス化し、getName()メソッドを呼び出すしようとすると、私はエラーを取得:

leafletwrapper-0.js:1183 Uncaught TypeError: spring.getName is not a function

私のコードに間違いがありますか?

答えて

0

あなたが持っているJavaScriptによると、一つの解決策は、注釈

import jsinterop.annotations.JsMethod; 
import jsinterop.annotations.JsType; 

@JsType(isNative=true, namespace = "com.gwidgets") 
public class Spring { 

    @JsMethod 
    public native String getName(); 
} 

に名前空間を追加したり、(ジャバスクリプトと同じ)com.gwidgetsのjavascriptの

または変更の名前空間をパッケージ化するJavaクラスの春を移動することができクラスSpringのパッケージと一致するようにする

+0

お返事ありがとうございます。それは今働く。私は名前空間を削除し、namespace = JsPackage.Globalを使用しました。また、JSinteropの問題を引き起こすような2.8ベータの代わりにGWT 2.8 VC-Snapshotを使用しました。 –

+0

名前空間を保持する方がコードが別のjavascriptライブラリと共存する。他の誰かがSpringを使用して、後で読み込まれた場合に参照を書き換えることができます。 (私はこの方法は単なるテストであると理解しています) – klaun