GWT JSNI -调用特定对象的java方法
GWT JSNI - Call java method of specific object
考虑以下小部件。我把其中两个添加到我的页面上。第一个获得名称为"widget1",第二个获得名称为"widget2"。它应该给出自己的名字,但从javascript调用。(这个例子没有任何意义,但只是一个简单的例子来弄清楚,如何做到这一点。)
public class MyComponent extends Composite{
String name;
public MyComponent(String name) {
this.name =name;
Button b = new Button(name);
b.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
myonclick();
}
});
initWidget(b);
declareMethod(this);
}
public native void declareMethod(MyComponent myWidget) /*-{
$wnd.myWidget = myWidget;
}-*/;
public native void myonclick() /*-{
$wnd.myWidget.@de.jsni.test.client.MyComponent::doSomething()();
}-*/;
public void doSomething() {
Window.alert(name);
}
}
我现在的问题是:两个按钮提醒消息"widget2"。这是因为我在"declareMethod"中覆盖了"myWidget"变量。我如何存档调用正确对象的doSomething()方法?我可以在这里使用某种命名空间方法吗?
您的问题是,当创建MyComponent
时,$wnd.myWidget
被设置为引用该项目。所以,如果你创建了MyComponent
#1,然后创建了MyComponent
#2,你将始终得到等于MyComponent
#2的$wnd.myWidget
。
与其定义一个设置JS变量的方法,不如直接在本机方法中引用窗口,如下所示:
public native void myonclick(MyComponent comp) /*-{
comp.@de.jsni.test.client.MyComponent::doSomething()();
}-*/;
然后,在click处理程序中,按如下方式调用myonclick
:
@Override
public void onClick(ClickEvent event) {
myonclick(MyComponent.this);
}
我认为这应该可行。如果有什么问题请告诉我,我会尽力帮忙的。
:你可以尝试以下,但老实说,我不知道它是否会与外部javascript玩得很好。我从来没有真正处理过这个用例。
public native void myonclick() /*-{
this.@de.jsni.test.client.MyComponent::doSomething()();
}-*/;
我正在解决我的问题,现在下沉的事件,我感兴趣的,例如:sinkEvents(事件)在构造函数和处理它们在我的onBrowserEvent(事件e)方法。对于我的问题,这是一个更简单和方便的方法。
相关文章:
- 如何使用json将对象列表从java转换为javascript
- 使用js或extjs访问对象的java列表
- 如何在java脚本中传递对象数组
- 是否可以在javascript中反序列化java对象
- 对象序列化,JAVA,Javascript
- 通过GWT JSNI传递Java对象时出错
- 在JSON.parse Javascript中字符串化Java对象抛出错误
- 将Java对象转换为JSON
- Java Script将对象方法映射到数组中的对象
- 我如何才能拥有一个类型为Java.util.Arraylist的javascript对象
- 在 Java 中访问 JavaScript 对象的字段
- 当我将 Java 对象传递给客户端时,我得到“406 不可接受”
- 使用 JQuery 创建 Java 对象
- 将SortedMap从Java转换为Javascript中可读的排序对象
- 在Javascript函数中获取Java对象属性
- 重建有角度的java脚本数组对象
- JQuery获取Java ArrayList对象
- JavaFX+Javascript:如何将Java对象注入AMD模块
- 如何在 Node JS 中反序列化对象(Java 序列化对象)
- 使用javascript对象/ Java代码将项目添加到本地json文件中