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.