使用GWT JsInterop实现Javascript函数回调
我想像这样包装一个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');
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
标志?