我在网上搜索了正确的答案,但我一直未能做到这一点:
在EntryPoint类中,我需要根据嵌套小部件中发生的事件来管理小部件。我已经清除了代码,只关注重要的事情。
我构建了一些UiBinder小部件,例如,用户可以输入其凭据的“登录”窗格。在我的EntryPoint类中,我将小部件添加到正确的位置。
// This is from EntryPoint class
public void onModuleLoad() {
LoginPane lp = new LoginPane();
RootPanel.get("headerRightPane").add(lp);
lp.setFocus();
// Other widgets added in same manner after this point...
}
我想成功登录以删除LoginPane并将其替换为另一个窗口小部件(AccountPane),该窗口小部件将显示登录用户的帐户信息。我在LoginPane中有一个onClick事件,它向一个功能齐全的Servlet,用于检查凭据。在这一点上,如果Servlet确定登录确实成功,我想发起一个“successfulLogin”事件(来自LoginPane),它可以通知EntryPoint类,现在可以用AccountPane替换LoginPane。
// This is from LoginPane class
@UiHandler("loginButton")
void onClick(ClickEvent e) {
checkCredentials(usernameField.getText(), passwordField.getText());
}
public void checkCredentials(String username, String password) {
String usernameToServer = username;
String passwordToServer = password;
credentialsService.credentialsServer(usernameToServer, passwordToServer,
new AsyncCallback<CredentialsPaneContent>() {
public void onFailure(Throwable caught) {
answerLabel.setText(Utilities.SERVER_ERROR);
}
public void onSuccess(CredentialsPaneContent result) {
if ( result == null ) {
answerLabel.setText("Login Failed.");
} else {
// Fire event here (to be caught by EntryPoint class)
answerLabel.setText("Login Successful.");
}
}
});
}
所以,问题是:我应该如何从嵌套小部件创建,触发和监听事件?
答案 0 :(得分:4)
使用EventBus
。此外,请考虑采用Model-View-Presenter模式,以便在应用程序增长时保持应用程序的可维护性:
答案 1 :(得分:0)
让我们有一个由EntryPoint类实现的接口, 现在有一个接口类型的参考,实际上是接口的对象。 使用此接口引用会调用listner(interface)mothod,它可以满足您的需要。