【问题标题】:From javascript to java (A GWT story)从 javascript 到 java(一个 GWT 故事)
【发布时间】:2011-12-15 20:43:05
【问题描述】:

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

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

在第二次草图绘制后有结果。但是我们如何让它回到 gwt 呢?问题是入口点实例发起了请求,而 JSNI 只能将静态方法映射到 javascript。

我以为我有一个包含事件和元素的解决方案...

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

然后监听 GWT 的变化。唉,它不起作用。 Gwt 自己的事件系统覆盖、接收、阻止(或其他)事件。我应该采取什么方法?我一直在网上搜索信息,但我当然无法理解它。我猜答案是……

1 从 javascript 调用入口点实例方法(以某种方式)
2 从 javascript 中触发一个事件,该事件将被 gwt 拾取(不知何故)
3 设置各种异步回调接口机制(不知何故)

【问题讨论】:

    标签: java javascript events gwt jsni


    【解决方案1】:

    界面应该很简单。

    例如,假设我们在 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 函数,它将调用实例上的方法。就这样。没有更多的魔法=)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2014-11-13
    • 2017-02-22
    • 2017-01-04
    • 2017-05-14
    • 2012-03-23
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多