从javascript到java(一个GWT故事)



所以,我正在为嵌入式web浏览器(Sketchup)设计一个GWT应用程序。我可以通过改变窗口来控制Sketchup。location值为"skp::myFunciton@myParams"。Sketchup可以在浏览器中执行javascript。我想做的是让sketchup给我它的模型的内容。

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

在第二次sketchup有结果后。但是我们怎么把它转回gwt呢?问题是启动请求的入口点实例和JSNI只能将静态方法映射到javascript。

我想我有一个解决方案的事件和元素…

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

,然后监听GWT中的更改。唉,这行不通。Gwt自己的事件系统覆盖、接收、阻止(或其他)事件。我应该采取什么方法?我一直在网上搜索信息,但我实在是摸不着头脑。我猜答案是…

1从javascript调用entrypoint实例方法(以某种方式)
从javascript中触发一个事件,它将被gwt(以某种方式)拾取
设置一个异步回调接口机制(以某种方式)

界面应该非常简单。

例如,假设我们在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函数,它将在实例上调用方法。这是所有。

最新更新