次のウィジェットを検討してください。そのうちの 2 つをページに追加します。最初のものは「widget1」という名前を取得し、2 番目のものは「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() メソッドを呼び出すにはどうすればよいですか? ここである種の名前空間アプローチを使用できますか?