typo....have .'s instead of /'s in the JSNI...fixed an am trying now
On Sep 15, 12:21 pm, JaM <jej2...@gmail.com> 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<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
-~----------~----~----~----~------~----~------~--~---