当前位置: 首页 > 面试题库 >

使用GWT JsInterop实现Javascript函数回调

卜高超
2023-03-14
问题内容

我想包装这样的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代码不一致。感谢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回调函数的开发人员有所帮助。



 类似资料:
  • 问题内容: 我需要使用“接口”在Java中实现回调函数。我已经将应用程序部分写为 m_GetSizeInterface是一个包含回调函数GetSize的接口。此GetSize方法在应用程序中被覆盖。在JNI中,我需要调用具有原型的CPP函数 如何将此GetSize作为参数传递给JNI中的MyCPPFunction?请帮忙 问题答案: 这里的复杂之处在于您要调用本机C ++代码,而您又要调用Java

  • 本文向大家介绍JavaScript实现的in_array函数,包括了JavaScript实现的in_array函数的使用技巧和注意事项,需要的朋友参考一下 在JS中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数。但我们可以写一个类似in_array()函数来判断是一个值否在函数中。 如果传入的不是数组则会抛出异常   直接报错:

  • 这样的函数怎么实现。 这样操作需要 new Sint(1,2) ,有什么办法可以实现直接 Sint(1,2).j(10) 输出结果吗?

  • 问题内容: 我在返回查询时遇到了几个问题。 在这里,我想做的是: 我在不同的帖子上看到了回调函数,但是它不适用于我想做的事情。 问题答案: 我在不同的帖子上看到了回调函数,但是它不适用于我想做的事情。 是的,您只需要更改对代码的思考方式即可。与其编写,不如编写一个名为的函数: 然后,而不是这样写: 您可以这样写: 现在,您可能会问自己,在那之后还有其他事情吗?好吧,您需要修改函数使其行为类似于和而

  • 我正在尝试一个非常基本(人为)的条件类型函数,但遇到了意外错误: 我认为这是一个非常简单的条件类型用法,所以不确定发生了什么。有什么想法吗?