我们如何在本机方法中创建JavaScript对象?

时间:2012-12-26 03:19:23

标签: gwt jsni

我正在使用google maps api,我想创建一个对象的实例:

public static final native void test(double lat, double lng) /*-{
    var obj = new google.maps.LatLng(lat, lng);
}-*/; 

但上述方法不起作用,打印出以下错误:

com.google.gwt.core.client.JavaScriptException: (ReferenceError)
@com.google.gwt.core.client.impl.Impl::apply
    (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)
    ([JavaScript object(4), JavaScript object(3), JavaScript object(6)]): 
    google is not defined

所以我可能要向GWT解释“google.maps.LatLng”对象是什么 - 我该怎么做?我认为有一个特定的语法,但似乎无法在文档中找到它,

由于

1 个答案:

答案 0 :(得分:3)

如果您在主机页面的其他位置定义google.maps,则必须在GWT代码中以$ wnd作为前缀:

public static final native void test(double lat, double lng) /*-{
    var obj = new $wnd.google.maps.LatLng(lat, lng);
}-*/;

来自GWT文档:

  

从JSNI访问浏览器的窗口和文档对象时,   你必须分别将它们引用为$ wnd和$ doc。你的编译   脚本在嵌套框架中运行,$ wnd和$ doc是自动的   初始化为正确引用主页的窗口和文档。