I have the same problem with addEventListener, the generated code is not exactly as you mention:
This is my code:
public interface EventListener<E extends JsObject> {
void onEvent(E event);
}
@JsType(prototype = "HTMLElement")
public interface HTMLElement extends Element {
public void setAttribute(String align, String center);
public void appendChild(HTMLElement element);
public void addEventListener(String event, EventListener<? extends JsObject> handler);
@JsProperty
public void setInnerHTML(String text);
@JsProperty
public void setInnerText(String text);
}
.....
HTMLElement button = doc.createElement("button");
.....
.....
button.setInnerText("UPDATE - See the console");
button.addEventListener("click", new EventListener<JsObject>() {
@Override
public void onEvent(JsObject event) {
window().getConsole().log(event);
}
});
....
....
....
body.appendChild(button);
.....
....
This is the generated code:
_.onModuleLoad = function() {
var body_0, button, div, input_0, observer, p, person;
body_0 = $wnd.document;
div = body_0.createElement("DIV");
p = body_0.createElement("P");
input_0 = body_0.createElement("input");
button = body_0.createElement("button");
body_0 = $wnd.document.body;
person = new clgscm$Person;
observer = new $wnd.PathObserver(person, "name");
input_0.bind("value", observer);
button.innerText = "UPDATE - See the console";
button.addEventListener("click", new clgsc$gwt_sample$01(this));
$wnd.console.log("%cWelcome to JSInterop!%c", initValues(jl$getClassLiteralForArray_0(cggl$Ljava_lang_String_2_classLit, 1), $intern_2, 2, 4, ["font-size:1.5em;color:#4558c9;", "color:#d61a7f;font-size:1em;"]));
div.appendChild(p);
div.appendChild(input_0);
body_0.appendChild(div);
body_0.appendChild(button);
};
createForClass(61, cggl$Ljava_lang_Object_2_classLit);
function clgsc$gwt_sample$01(this$0) {
this.this$01 = this$0;
jl$$0init__V__devirtual$0(this);
}
Any Suggestion?
Thanks!!!
El martes, 22 de julio de 2014 07:16:06 UTC-3, 田传武 escribió:
Yes, i didn't use addEventListener. But i has a similar usage:
Java
translated to js
bus.subscribe("some/topic", function(message) {
var body = message.body();
console.log("Name: " + body.name);
});
A bonus issue, I saw you did not use addEventListener like the demo does, and I really struggled to make it work. The generated javascript looks like "addEventListener('click', new xxx(this))" which doesn't work (the key thing here being "new" I'd guess). I found no other way to call it directly and eventually resorted to doing it from a jsni function instead:
public static native void jsAddEventListener(Element elem, String event, EventListener listener) /*-{
elem.addEventListener(event, function(ev) { listener.onEvent(ev); });
}-*/;
Which demo uses addEventListener?