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

Reply via email to