当UI组件需要跨应用程序多次重用时,GWT小部件很有用。
GWTP的PresenterWidget是一个利用常规GWT Widgets功能的强大工具,因为它可以很好地分离您的UI组件。
应用程序通常包含复杂的UI小部件,有时这些元素非常复杂,以至于最好将应用程序逻辑与UI逻辑分开。这是它来得方便的地方。
SimplePresenter.java
public class SimplePresenter extends PresenterWidget<SimplePresenter.MyView> {
interface MyView extends View {
void displayCurrentUserName(String username);
}
private final CurrentUserService currentUserService;
@Inject
SimplePresenter(EventBus eventBus,
MyView view,
CurrentUserService currentUserService) {
super(eventBus, view);
this.currentUserService = currentUserService;
}
@Override
public void onBind() {
getView.displayCurrentUserName(currentUserService.getCurrentUsername());
}
}
SimpleViewImpl.java
public class SimpleViewImpl extends ViewImpl implements SimplePresenter.MyView {
interface Binder extends UiBinder<HTMLPanel, SimpleView> {
}
@UiField
SpanElement username;
@Inject
SimpleView(Binder binder) {
initWidget(binder.createAndBindUi(this));
}
public void displayCurrentUserName(String username) {
this.username.setText(username);
}
}
SimpleViewImpl.ui.xml
ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:HTMLPanel>
Current user's name: <span ui:field="username"></span>
</g:HTMLPanel>
</ui:UiBinder>
如前所述,SimplePresenter与其视图实现松散耦合,因为它告诉做什么而不是如何去做。
这样做可能会让开发人员为同一个presenter实现多个view;presenter知道该怎么做,并且多个view分别处理其请求。
网友评论