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
-~----------~----~----~----~------~----~------~--~---

Reply via email to