Ok, so after doing what was listed above it seems as if the scope is correct. It's a little strange to me that what I was doing originally did not work but having this work makes me very happy. Thank you for your help, it really is appreciated.
On Sep 15, 12:23 pm, JaM <[email protected]> wrote: > typo....have .'s instead of /'s in the JSNI...fixed an am trying now > > On Sep 15, 12:21 pm,JaM<[email protected]> wrote: > > > 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<[email protected]> 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, > > > [email protected]::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) { > > > > > > [email protected]::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 <[email protected]> wrote: > > > > > On 15 sep, 04:24,JaM<[email protected]> 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) { > > > > [email protected]::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) { > > > > > > > > �[email protected]::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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en -~----------~----~----~----~------~----~------~--~---
