5

そこで、組み込み Web ブラウザー (Sketchup) 用に GWT でアプリを設計しています。window.location の値を「skp::myFunciton@myParams」に変更することで、Sketchup を制御できます。Sketchup はブラウザで JavaScript を実行できます。私がやりたいことは、スケッチアップにそのモデルの内容を提供するよう依頼することです。

public static native void getModel() /*-{
    $wnd.location = "skp:getModel@";
}-*/;

2 回目のスケッチアップの後、結果が得られます。しかし、どうすればそれを gwt に戻すことができるでしょうか? 問題は、エントリポイント インスタンスがリクエストを起動し、JSNI が静的メソッドを JavaScript にしかマップできないことです。

イベントと要素で解決策があると思いました...

//Sketchup javascript
var gwtwidget = document.getElementById("myTextArea")
gwtwidget.value = "blahblah";
gwtwidget.onchange();

次に、GWT の変更をリッスンします。残念ながら、うまくいきません。Gwt 独自のイベント システムは、イベントをオーバーライド、シンク、抑止 (または何でも) します。どのようなアプローチを取るべきですか? 私は情報を求めてウェブを調べてきましたが、確かに頭に浮かぶことはありません。答えはどちらかだと思います...

1 javascript からエントリポイント インスタンス メソッドを呼び出す (何らかの方法で)
2 gwt によって取得される JavaScript からイベントを発生させる (何らかの方法で)
3 ある種の非同期コールバック インターフェイス メカニズムをセットアップする (何らかの方法で)

4

1 に答える 1

7

インターフェースは非常にシンプルでなければなりません。

たとえば、GWT に何らかのオブジェクトがあるとします。コールバックをパラメーターとして受け入れる関数が JS にあるとします。したがって、gwt では次のようになります。

    public static native void executeFunctionWithCallBack(MyCallback callback)/*-{
           var callBackWrapper =function(param) {
              callback.@com.package.MyObject::onSuccess(*)(param);
           } 
           $wnd.invokeFunctionWithCallback(callbackWrapper)  
     }-*/;

インスタンス メソッドを呼び出したい場合は、メソッドだけでなく、メソッドを呼び出すインスタンスも公開する必要があります。たとえば、インスタンスをパラメーターとして JSNI メソッドに渡す (または他の方法で JSNI から取得する) 必要があります。次に、インスタンスでメソッドを呼び出す JS 関数を作成します。それで全部です。もう魔法はありません=)

于 2011-12-15T21:55:55.533 に答える