使用GWT JsInterop实现Javascript函数回调

使用GWT JsInterop实现Javascript函数回调,javascript,java,gwt,gwt-jsinterop,Javascript,Java,Gwt,Gwt Jsinterop,我想像这样包装一个javascript代码: map.addMarker({ lat: -12.043333, lng: -77.028333, draggable: true, fences: [polygon], outside: function(m, f){ alert('This marker has been moved outside of its fence');

我想像这样包装一个javascript代码:

map.addMarker({
        lat: -12.043333,
        lng: -77.028333,
        draggable: true,
        fences: [polygon],
        outside: function(m, f){
          alert('This marker has been moved outside of its fence');
        }
      });
下面是我如何用Java编写的:

@JsType(namespace = JsPackage.GLOBAL, isNative = true, name = "Object")
public class MarkerOptions {
    @JsProperty
    public double lat;

    @JsProperty
    public double lng;

    @JsProperty
    public boolean draggable;

    @JsProperty
    public Polygon fences;

    @JsFunction
    public interface FunctionOutsideParam {
        void outside();
    }

    @JsProperty
    public FunctionOutsideParam outside;
}
但它不起作用。即使是你,我的浏览器控制台中也没有任何错误。有人知道如何让它为外部回调函数工作吗?
谢谢和问候。

我终于找到了解决办法。我的java代码似乎与我的javascript代码不一致。感谢科林·阿尔沃思为我指出了不一致的部分。这是我的全部代码:

@JsType(namespace = JsPackage.GLOBAL, isNative = true, name = "Object")
public class MarkerOptions {
    @JsProperty
    public double lat;

    @JsProperty
    public double lng;

    @JsProperty
    public boolean draggable;

    @JsProperty
    public Polygon[] fences;

    @JsFunction
    public interface FunctionOutsideParam {
        void outside(Marker m, Polygon[] f);
    }

    @JsProperty
    public FunctionOutsideParam outside;
}

现在,每当我运行它时,外部函数回调都被正确地调用了。谢谢大家。我希望我的回答能帮助其他试图用GWT JSInterop实现js回调函数的开发人员。

它是如何实现的?错误?预期调用没有发生?示例JS和Java不一致,
fences
属性应该是
Polygon[]
,而
FunctionOutsideParam
应该有两个参数,对吗?你能分享你拥有的Java吗?它与你在问题中拥有的JS相当吗?@Andrei调用没有发生,在控制台或其他任何地方都没有错误。这就是为什么怎么做更让人困惑的原因。@ColinAlworth是的,你是对的。它们不一致,我将尝试更新它。我将发布JS和Java代码的完整代码。谢谢。虽然我以前没有使用过函数,但看起来它应该可以工作。最终的JS是否包含您的MarkeOptions类?您是否使用
generateJsInteropExports
标志?