JSNI从基金会回调到GWT功能-不被解雇

JSNI从基金会回调到GWT功能-不被解雇,gwt,zurb-foundation,jsni,Gwt,Zurb Foundation,Jsni,我再次与JSNI回调的问题作斗争(参见我的发布历史)。我正在建造一个包装基金会。巡更运行正常,但“postRideCallback”(巡更完成后调用)不会触发。如果我使用(接近)相同的语法从控制台调用tour,则会触发回调 以下是控制台中的工作原理: $(document).foundation( { joyride : { post_ride_callback : function() { window.alert('hello world

我再次与JSNI回调的问题作斗争(参见我的发布历史)。我正在建造一个包装基金会。巡更运行正常,但“postRideCallback”(巡更完成后调用)不会触发。如果我使用(接近)相同的语法从控制台调用tour,则会触发回调

以下是控制台中的工作原理:

$(document).foundation( 
    { joyride : 
        { post_ride_callback : function() 
            { window.alert('hello world'); } 
    } 
}).foundation('joyride', 'start')
以下是相关的GWT代码;调用start()会运行巡更,但不会调用回调

public void start() {
    __native_start(endTour(this), anotherFunction(this));
}

public native static void __native_start(JavaScriptObject endTour, JavaScriptObject  
anotherFunction) /*-{
    anotherFunction(); // this runs

    $wnd.$($doc).foundation(
        { joyride :
            { postRideCallback: function() // this does not run
                { 
                  anotherFunction(); 
                  endTour(); 
                }
            }
        }
    ).foundation('joyride', 'start');
}-*/;

public static native JavaScriptObject endTour(Tour tour) /*-{
    return tour == null ? null : $entry(function() {
        tour.@io.myapp.client.ui.widgets.foundation.Tour::tourHasEnded()()
    });
}-*/;

public static native JavaScriptObject anotherFunction(Tour tour) /*-{
    return tour == null ? null : $entry(function() {
        tour.@io.myapp.client.ui.widgets.foundation.Tour::callbackSuccess()()
    });
}-*/;

public void callbackSuccess() {
    Window.alert("hello yes");
}
编辑-此处需要澄清的是:

a) 请注意,对另一个函数()的第一次调用有效。在运行巡演之前,它会弹出一个带有“hello yes”的警报。 b) 如果我用
window.alert('hello world')替换postStepCallback函数体
$wnd.alert('hello world')
,什么都没有发生。所以我不相信这和GWT引用本身有任何关系(尽管我看到它们似乎是错误的)

EDIT2-ok,根据Tomasz做了一些修改(并删除了$entry样板文件作为实验)。新行为-开发模式控制台中的stacktrace(代码后):

堆栈跟踪:

com.google.gwt.core.client.JavaScriptException: (String) : Invoking an instance method on a null instance   
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)  
at com.google.gwt.dev.shell.ModuleSpace.createJavaScriptException(ModuleSpace.java:80)  
at com.google.gwt.dev.shell.ModuleSpace.createJavaScriptException(ModuleSpace.java:64)  
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:60)   
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)    
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)    
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)    
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)    
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)  
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:299)  
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)    
at io.myapp.client.ui.widgets.foundation.Tour.__native_start(Tour.java)

答:在GWT代码中,我使用的是旧的(Foundation 4)驼峰大小写,而不是下划线分隔的选项名称。在控制台中,我昨晚晚些时候发现下划线是正确的,但今天早上我用GWT尝试时忘记了这一点。啊

com.google.gwt.core.client.JavaScriptException: (String) : Invoking an instance method on a null instance   
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)  
at com.google.gwt.dev.shell.ModuleSpace.createJavaScriptException(ModuleSpace.java:80)  
at com.google.gwt.dev.shell.ModuleSpace.createJavaScriptException(ModuleSpace.java:64)  
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:60)   
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)    
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)    
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)    
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)    
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)  
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:299)  
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)    
at io.myapp.client.ui.widgets.foundation.Tour.__native_start(Tour.java)