2011-12-15 9 views
3

그래서 GWT에 내장 웹 브라우저 (Sketchup) 용 앱을 설계하고 있습니다. window.location 값을 "skp :: myFunciton @ myParams"로 변경하여 Sketchup을 제어 할 수 있습니다. Sketchup은 브라우저에서 자바 스크립트를 실행할 수 있습니다. 내가하고 싶은 것은 sketchup에 모델의 내용을 알려주는 것입니다.자바 스크립트에서 자바 (A GWT 이야기)

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

두 번째 스케치 업 결과가 있습니다. 그러나 우리는 어떻게 그것을 gwt로 되돌려 놓을 수 있습니까? 문제는 엔트리 포인트 인스턴스가 요청을 시작하고 JSNI가 정적 메소드를 자바 스크립트에만 매핑 할 수 있다는 것입니다. 내가 이벤트 및 요소와 솔루션을했다고 생각

...

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

다음 GWT의 변화를 듣고. 아아, 작동하지 않습니다. Gwt의 자체 이벤트 시스템은 이벤트를 무시, 싱크, 중지 (또는 무엇이든)합니다. 어떤 접근 방식을 취해야합니까? 나는 정보 검색을 통해 웹을 봤지만 확실히 내 머리를 얻을 수는 없다. 나는 ... 대답은 하나입니다

1 호 (어떻게 든) 자바 스크립트에서 엔트리 포인트 인스턴스 방법을 추측하고있어
2 방화 (어떻게 든) GWT에 의해 포착됩니다 자바 스크립트에서 이벤트
3 설치 비동기 (어떤 식 으로든) 콜백 인터페이스 메커니즘

답변

6

인터페이스는 매우 간단해야합니다.

예를 들어 GWT에 개체가 있다고 가정 해 봅시다. JS에서 일부 콜백을 매개 변수로 허용하는 함수가 있다고 가정 해 보겠습니다. 당신이 인스턴스 메서드를 호출 할 경우

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

, 당신은이뿐만 아니라 호출해야하는뿐만 아니라 방법,하지만 인스턴스를 노출해야합니다 그래서 GWT에서 우리는 다음과 같이해야합니다. 예 : JSNI 메소드에 매개 변수로 인스턴스를 전달해야합니다 (또는 다른 방법으로 JSNI에서 확보해야 함). 그런 다음 instance에서 method를 호출 할 JS 함수를 만듭니다. 그게 다야. 더 이상의 마법 =)

+0

정말 좋아 보인다. 그것을 시도해보고 알려 드리겠습니다. – noelwarr

+0

더 많은 마법이 있습니다. $ entry (...) 함수는 http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#calling을 참조하십시오. 이 함수는 자바 스크립트에 노출 된 자바 메소드를 래핑하는 데 사용해야합니다. 자바 코드에서 발생할 수있는 예외 처리 :'var callBackWrapper = $ entry (function (param) {...});' – haui

관련 문제