Tuesday, April 3, 2012

Re: Exporting Instance Methods to Hand-Written Javascript


On Monday, April 2, 2012 10:26:27 PM UTC+2, Geoffrey Wiseman wrote:
I have a piece of GWT code that I wanted to invoke from outside handwritten JavaScript. There's an example shown here under "Calling a Java method from Handwritten JavaScript":

That example uses a static method; I can make that work, but my first instinct was that i'd rather use an instance, so using the syntax shown under JSNI invocations, I tried:
/* package */ native void exportJavascriptMethods( PreviewPane x ) /*-{
       $wnd.imageSelected =
          $entry(this@ca.cpp.spike.gwtapplet.client.PreviewPane::imageSelected(Ljava/lang/String;Ljava/lang/String;));
  }-*/;
That doesn't work. Eclipse (and the GWT compiler) complain:
"JavaScript parsing: Missing ) after argument list PreviewPane.java"

You're missing the '.' before the '@', so it might be the issue (the parser chokes on the '@' and says the $entry() call is missing its closing paren, or something like that).

You'll have another issue when you fix this syntax error though: you get a reference on the method but, like in Java with java.lang.reflect.Method, the instance it's called on has to be given at call time.
You have to write:
   var that = this;
   $wnd.imageSelected = $entry(function(s1, s2) {
         return that.@ca.cpp.spike.gwtapplet.client.PreviewPane::imageSelected(Ljava/lang/String;Ljava/lang/String;)(s1, s2);
      });


--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/arV8TNOAk7gJ.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

No comments:

Post a Comment