【问题标题】:Implement Javascript Function Callback with GWT JsInterop使用 GWT JsInterop 实现 Javascript 函数回调
【发布时间】:2017-06-12 12:23:38
【问题描述】:

我想像这样包装一个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;
}

但它不起作用。即使你在我的浏览器控制台中也没有任何错误。有人知道如何使它适用于外部回调函数吗? 谢谢和问候。

【问题讨论】:

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

标签: javascript java gwt gwt-jsinterop


【解决方案1】:

我终于找到了解决办法。看来我的 java 代码与我的 javascript 代码不一致。感谢 Colin Alworth 指出了不一致的部分。所以这是我的完整代码:

@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 回调函数的开发人员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多