also, unless I am doing something wrong the above does not seem to work properly....
I get an error on compile saying [ERROR] Line 50: Expected a valid parameter type signature in JSNI method reference which is pointing at the nativeSubscribe method. Again your help is appreciated. public native void nativeSubscribe(String channel, EventHandler callback) /*-{ $wnd.subscribe(function(channel) { @my.package.EventingController::callback (Lmy.package.EventHandler;Ljava/lang/String;Ljava/lang/String;) (channel, callback); }); }-*/; private static void callback(EventHandler callback, String sender, String message) { UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler (); if (handler == null) { callbackImpl(callback, sender, message); } else { callbackAndCatch(handler, callback, sender, message); } } private static void callbackImpl(EventHandler callback, String sender, String message) { callback.onEvent(sender, message); } private static void callbackAndCatch(UncaughtExceptionHandler handler, EventHandler callback, String sender, String message) { try { callbackImpl(callback, sender, message); } catch (Throwable t) { handler.onUncaughtException(t); } } On Sep 15, 11:21 am, JaM <jej2...@gmail.com> wrote: > Thanks for the reply! I am trying to digest this as I am new to GWT > and Javascript so please bare with me. > > Ok, so clearly I am missing something here. Currently I am not > calling static methods (is this required?) for the callback because I > want to be able to access member variables. I have the following > > public interface EventHandler { > void onEvent(String channel, String message); > > } > > native void nativeMethod(String channel, EventHandler handler) /*-{ > $wnd.subscribe(channel, > handl...@my.package.eventhandler::onEvent > (Ljava/lang/String;Ljava/lang/String;)); > }-*/; > > but when the onEvent gets called I can only access some final > variables (none of the GXT members can be accessed, really only public > strings). In order to make this work I have to make my member > variables static, otherwise everything comes up as undefined, which is > why I believe this is a scope issue. Should what I am doing work? > > I am also trying to do the following (which I think is your > suggestion) > native void nativeSubscribe(String channel, EventHandler handler) /*-{ > var that = handler; > $wnd.subscribe(function(channel, handler) { > > handl...@my.package.eventhandler::onEvent(Ljava/lang/String;Ljava/ > lang/String;)(that, channel, message); > });}-*/; > > but that did not work at all. Any thoughts? > > On Sep 15, 10:23 am, Thomas Broyer <t.bro...@gmail.com> wrote: > > > On 15 sep, 04:24,JaM<jej2...@gmail.com> wrote: > > > > I previously posted about Shindig, when probably more appropriately I > > > should have posted this question (sorry for the dup). > > > > I have successfully implemented a callback in Java (using an > > > interface) which is called from Javascript appropriately, but after > > > doing so it seems something is not quite right (perhaps the scope, not > > > really sure how to determine). The issue is that I now get an error > > > that says something like jV(this.a.a...) and it throws an error saying > > > this.a is undefined. The issue only happens when I am trying to > > > access instance variables inside my java code. If I do not access > > > instance variables everything works fine, which leads me to believe it > > > may be a scoping issue. Is there a general rule of thumb for how to > > > do this correctly in GWT? Any pointers would be greatly appreciated. > > > This generally works: > > > public interface MyCallback { > > void callback(int a, int b, String c); > > > } > > > public native void doSomething(MyCallback callback) /*-{ > > $wnd.doSomething(function(a, b, c) { > > callba...@my.package.mycallback::callback(IILjava/lang/String;) > > (a, b, c); > > }); > > > }-*/; > > > Actually, you'd generally call some static method that uses the > > UncaughtExceptionHandler if there's one: > > public native void doSomething(MyCallback callback) /*-{ > > $wnd.doSomething(function(a, b, c) { > > @my.package.MyClass::callback(Lmy/package/MyCallback;IILjava/ > > lang/String;)(a, b, c, callback); > > });}-*/; > > > private static void callback(MyCallback callback, int a, int b, String > > c) { > > UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler > > (); > > if (handler != null) { > > callbackImpl(callback, a, b, c); > > } else { > > callbackAndCatch(handler, callback, a, b, c); > > }} > > > private static void callbackImpl(MyCallback callback, int a, int b, > > String c) { > > callback.callback(a, b, c);} > > > private static void callbackAndCatch(UncaughtExceptionHandler handler, > > MyCallback callback, int a, int b, String c) { > > try { > > callbackImpl(callback, a, b, c); > > } catch (Throwable t) { > > handler.onUncaughtException(t); > > } > > > } > > > ..and finally, if your callback is "this": > > public native void doSomething() /*-{ > > var that = this; > > $wnd.doSomething(function(a, b, c) { > > �...@my.package.myclass::callback(Lmy/package/MyCallback;IILjava/lang/ > > String;)(that, a, b, c); > > }); > > > }-*/; > > > You'll find those patterns several times in GWT itself, as well as in > > other GWT libraries wrapping JavaScript libs (GALGWT, GWT-in-the-AIR, > > etc.) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en -~----------~----~----~----~------~----~------~--~---