2011-12-15 27 views
3

所以,我正在爲GWT設計一個嵌入式web瀏覽器(SketchUp)的應用程序。我可以通過將window.location值更改爲「skp :: myFunciton @ myParams」來控制Sketchup。 Sketchup可以在瀏覽器中執行JavaScript。我想要做的就是問問素描來給我模型的內容。從javascript到java(GWT故事)

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

第二次寫入結果後。但是,我們如何將它恢復到gwt?問題是啓動請求的入口點實例,JSNI只能將靜態方法映射到javascript。

我原本以爲事件和元素的溶液...

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

,然後偵聽在GWT的變化。唉,它不起作用。 Gwt自己的事件系統覆蓋,吸收,阻止(或其他)事件。我應該採取什麼方法?我已經通過網絡搜索信息,但我當然不能把我的頭轉過來。我猜答案是要麼...

1從JavaScript調用(在某種程度上)的入口點實例方法
2火從JavaScript事件將由GWT(以某種方式)被拾起
3設置異步回調接口機制的各種(不知何故)

回答

6

接口應該很簡單。

例如,假設我們在GWT中有一些對象。假設我們有一些JS接受一些回調參數的函數。因此,在GWT我們將有這樣的事情:

public static native void executeFunctionWithCallBack(MyCallback callback)/*-{ 
      var callBackWrapper =function(param) { 
       [email protected]::onSuccess(*)(param); 
      } 
      $wnd.invokeFunctionWithCallback(callbackWrapper) 
    }-*/; 

如果你想調用實例方法,你需要公開不僅是方法,但是例如其上它應該被稱爲爲好。例如。您必須將實例作爲參數傳遞給JSNI方法(或以其他方式從JSNI獲取它)。然後你創建一個JS函數,它將在實例上調用方法。就這樣。沒有更多的魔力=)

+0

這看起來非常好。我會試試看,並讓你知道 – noelwarr 2011-12-18 08:16:45