I think Boris is correct by using $wnd.  I also call my javascript
library functions from a native method through $wnd, as described
here: 
http://googlewebtoolkit.blogspot.com/2008/07/getting-to-really-know-gwt-part-1-jsni.html

Boris' example seems complicated.  At the beginning I would simply
create a javascript function that calls alert:

function sayHello(name) {
  alert("Hello from JavaScript, " + name);
}

and a native method in my Entry Point class:

native void sayHelloInJava(String name) /*-{
  $wnd.sayHello(name);
}-*/;

(this is exactly as shown in the reference above)

I use exactly the same approach, except instead of using HTML file I
place my JS library into a public folder and use <script src='lib.js'/
> in my module.
This technique is described here:
http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModules

Once this worked I would move further.



On Oct 5, 2:33 pm, Daniel Kurka <[email protected]> wrote:
> if you are in javascript its not $wnd its just window :)
>
> 2010/10/5 Boris Lenzinger <[email protected]>
>
>
>
> > Sorry for the javascript : there is a mistake : variable name is not
> > buttonnode but button at return step of the method...
> > Anyway the problem still stands ;-)
>
> > Boris
>
> > 2010/10/5 Boris Lenzinger <[email protected]>
>
> >> Hi,
>
> >> I'm currently trying to call a "java" method from a javascript that lives
> >> outside of the generated javascript from GWT.
>
> >> What I want to do is the following :
> >>   make the gwt component communicates with a javascript component (in both
> >> ways).
> >> I have to say that I don't know at all javascript......
>
> >> The problem I encounter is the following :
> >>   * call to javascript method (generated by GWT) from my handwritten
> >> javascript does not work : firebug says : $wnd does not exist.
> >> I thought this variable was always existing in javascript but this
> >> assumption is may be false.
>
> >> I think it is quite basic (probably a problem of understanding in
> >> javascript). I have read the following (this is where I found most of the
> >> code for doing the stuff) :
>
> >>http://www.gwtapps.com/doc/html/com.google.gwt.doc.DeveloperGuide.Jav...
> >> plus others (like
> >>http://www.mail-archive.com/[email protected]/msg38...) 
> >>but I'm stuck there.
>
> >> Here the very basic code to test the feature :
>
> >> ============================
> >>        The GWT Component
> >> ============================
> >> package test.app.client;
>
> >> import com.google.gwt.core.client.EntryPoint;
> >> import com.google.gwt.dom.client.DivElement;
> >> import com.google.gwt.dom.client.Document;
> >> import com.google.gwt.event.dom.client.ClickEvent;
> >> import com.google.gwt.event.dom.client.ClickHandler;
> >> import com.google.gwt.user.client.ui.Button;
> >> import com.google.gwt.user.client.ui.DialogBox;
> >> import com.google.gwt.user.client.ui.HTML;
> >> import com.google.gwt.user.client.ui.RootPanel;
> >> import com.google.gwt.user.client.ui.VerticalPanel;
> >> import com.google.gwt.user.client.ui.Widget;
>
> >> /**
> >>  * Entry point classes define <code>onModuleLoad()</code>.
> >>  */
> >> public class GwtAndJavascript implements EntryPoint {
>
> >>   JsButton jsButton;
>
> >>   public void onModuleLoad() {
> >>     final Button gwtButton = new Button("Add item to JS !");
>
> >>     final VerticalPanel panel = new VerticalPanel();
> >>     panel.add(gwtButton);
>
> >>     RootPanel.get("sendButtonContainer").add(panel);
> >>     MyUtilityClass.exportStaticMethod();
>
> >>     final ClickHandler handler = new ClickHandler() {
>
> >>       public void onClick(ClickEvent event) {
> >>         jsButton.callSayHello("User");
> >>       }
> >>     };
> >>     gwtButton.addClickHandler(handler);
>
> >>     // Now I want to add javascript button that lives in a js script...
> >>     jsButton = new JsButton();
> >>     panel.add(jsButton);
>
> >>   }
>
> >>   private class JsButton extends Widget {
>
> >>     public JsButton() {
> >>       DivElement element = Document.get().createDivElement();
> >>       makeMyGraphicalObject(element);
> >>       setElement(element);
> >>     }
>
> >>     private native void makeMyGraphicalObject(DivElement element) /*-{
> >>       $wnd.createButton(element);
> >>     }-*/;
>
> >>     public native void callSayHello(String name) /*-{
> >>       $wnd.javascriptSayHello(name);
> >>     }-*/;
>
> >>   }
>
> >> }
>
> >> =======================
> >> The class that should help to trigger the java method from javascript
> >> =======================
> >> package test.app.client;
>
> >> import com.google.gwt.user.client.Window;
>
> >> public class MyUtilityClass {
>
> >>   public static void sayHello() {
> >>     Window.alert("Say Hello !");
> >>   }
>
> >>     public static native void exportStaticMethod() /*-{
> >>       $wnd.sayHello = @test.app.client.MyUtilityClass::sayHello();
> >>     }-*/;
>
> >> }
>
> >> ====================
> >> The HTML page
> >> ====================
>
> >> <html>
> >>   <head>
> >>     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
>
> >>     <!--                                                               -->
> >>     <!-- Consider inlining CSS to reduce the number of requested files -->
> >>     <!--                                                               -->
> >>     <link type="text/css" rel="stylesheet" href="GwtAndJavascript.css">
>
> >>     <!--                                           -->
> >>     <!-- Any title is fine                         -->
> >>     <!--                                           -->
> >>     <title>Web Application Starter Project</title>
>
> >>     <!--                                           -->
> >>     <!-- This script loads your compiled module.   -->
> >>     <!-- If you add any GWT meta tags, they must   -->
> >>     <!-- be added before this line.                -->
> >>     <!--                                           -->
> >>     <script type="text/javascript" language="javascript"
> >> src="gwtandjavascript/gwtandjavascript.nocache.js"></script>
> >>     <script type="text/javascript" language="javascript"
> >> src="button.js"></script>
> >>   </head>
>
> >>   <!--                                           -->
> >>   <!-- The body can have arbitrary html, or      -->
> >>   <!-- you can leave the body empty if you want  -->
> >>   <!-- to create a completely dynamic UI.        -->
> >>   <!--                                           -->
> >>   <body>
>
> >>     <!-- OPTIONAL: include this if you want history support -->
> >>     <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1'
> >> style="position:absolute;width:0;height:0;border:0"></iframe>
>
> >>     <!-- RECOMMENDED if your web app will not function without JavaScript
> >> enabled -->
> >>     <noscript>
> >>       <div style="width: 22em; position: absolute; left: 50%; margin-left:
> >> -11em; color: red; background-color: white; border: 1px solid red; padding:
> >> 4px; font-family: sans-serif">
> >>         Your web browser must have JavaScript enabled
> >>         in order for this application to display correctly.
> >>       </div>
> >>     </noscript>
>
> >>     <table align="center">
> >>       <tr>
> >>         <td id="sendButtonContainer"></td>
> >>       </tr>
> >>       <tr>
> >>         <td colspan="2" style="color:red;" id="errorLabelContainer"></td>
> >>       </tr>
> >>     </table>
> >>   </body>
> >> </html>
>
> >> ====================
> >> The javascript code
> >> ====================
>
> >> function createButton(divElement) {
> >>   var button= document.createElement('input');
> >>   button.setAttribute('type','button');
> >>   button.setAttribute('name','button');
> >>   button.setAttribute('value','JS Button');
> >>   divElement.appendChild(button);
> >>   button.onclick = function() { $wnd.sayHello; };
>
> >>   return button;
>
> >> }
>
> >> // This is called from java
> >> function javascriptSayHello(name) {
> >>   alert("Hello " + name);
> >> }
>
> >> ============
>
> >> Any help would be highly appreciated :-)
>
> >> thanks in advance
>
> >> Boris
>
> >  --
> > 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]<google-web-toolkit%2Bunsubs 
> > [email protected]>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-web-toolkit?hl=en.

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

Reply via email to