我已经关注过Dani的GWTP课程,但是不使用TabLayoutPanel和演示者。
我有一个带有3个标签的TabLayoutPanel(每个标签上都有一个VerticalPanel)。我使用了@ProxyCodeSplit,因此每个选项卡的代码都是独立加载的。
如果在Eclipse中,在GWT的Designer中我为OnBeforeSelection添加了一个处理程序,那么代码会自动添加到我的View中。然后,View可以加载适当的演示者。
这不是代码的合适位置 - 但是它呢?
如何在TabLayoutPanel中处理不同的标签并进行代码拆分?
答案 0 :(得分:0)
我想我已经弄明白了。
在使用TabLayoutPanel的演示者中(让我们称之为MainPresenter):
@ContentSlot public static final Type<RevealContentHandler<?>> SLOT_first = new Type<RevealContentHandler<?>>();
@ContentSlot public static final Type<RevealContentHandler<?>> SLOT_second = new Type<RevealContentHandler<?>>();
public interface MyView extends View {
public void setMainPresenter(MainPresenter presenter);
public TabLayoutPanel getTeamsPanel();
}
@Inject PlaceManager placeMananger;
@Inject FirstPresenter firstPresenter;
@Inject SecondPresenter secondPresenter;
@ProxyCodeSplit
public interface MyProxy extends Proxy<MainPresenter> {
}
@Inject
public MainPresenter(final EventBus eventBus, final MyView view,
final MyProxy proxy) {
super(eventBus, view, proxy);
view.setMainPresenter(this);
}
@Override
protected void revealInParent() {
RevealRootContentEvent.fire(this, this);
}
public void setTabContents(Integer tab) {
if (tab == 0) {
placeMananger.revealPlace(new PlaceRequest("first"));
} else if (tab == 1) {
placeMananger.revealPlace(new PlaceRequest("second"));
}
然后在MainView中实现方法setMainPresenter()以在本地存储引用。实现通常的setInSlot(),然后添加此选项卡处理程序:
@UiHandler("mainTabs")
void onMainTabsBeforeSelection(BeforeSelectionEvent<Integer> event) {
mainPresenter.setTabContents(event.getItem());
}
每次用户更改标签时,处理程序都会调用MainPresenter。然后setTabContents()将为相应的“tab”Presenter调用revealInParent()。