我使用他的服务器端类和客户端(连接器类,ServerRPC类,状态类和窗口小部件类)创建一个窗口小部件。
连接器:
@Connect(Custom.class)
public class CustomConnector extends ButtonConnector {
...
public void myFunc() {
// DO Something
}
}
小工具:
public class CustomWidget extends VButton {
...
private CustomConnector conn = new CustomConnector();
public CustomWidget () {
conn.myFunc();
}
...
}
现在从Widget类我想显式调用/访问不是Singleton的Connector对象,这样我也可以访问一个函数。我该如何解决?
答案 0 :(得分:0)
在我看来,你不应该直接从GWT小部件访问连接器。它反对Vaadin 7架构,其中GWT小部件是完全独立于vaadin的对象。
但是,如果我们谈论从Vaadin 6到7解决方案的脏迁移可能是:
ComponentConnector connector = ConnectorMap.get(client).getConnector(CustomWidget.this); // client is taken from updateFromUIDL method (Vaadin6)
更好的解决方案是将“状态”监听器添加到窗口小部件
public interface CustomWidgetStateListener {
public void stateChanged();
}
public class CustomWidget extends VButton {
...
CustomWidgetStateListener listener;
public void addStateListener(CustomWidgetStateListener listener) {
this.listener = listener;
}
public void notifyStateChanged() { // You can call notifyStateChanged() whenever you want to notify connector
listener.stateChanged();
}
...
}
public class CustomConnector extends ButtonConnector {
public CustomConnector() {
getWidget().addStateListener(new CustomWidgetStateListener() {
public void stateChanged() {
myFunc();
}
});
}
...
public void myFunc() {
// DO Something
}
}