Рассмотрим следующий виджет. Я добавляю два из них на свою страницу. Первый получает имя «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() /*-{
[email protected]::doSomething()();
}-*/;
public void doSomething() {
Window.alert(name);
}
}
Моя проблема сейчас такова: обе кнопки предупреждают о сообщении «widget2». Это потому, что я переопределяю переменную "myWidget" в "declareMethod". Как я могу заархивировать вызов метода doSomething() правильного объекта? Могу ли я использовать здесь какой-то подход к пространству имен?