【发布时间】:2013-11-04 13:14:54
【问题描述】:
这是我的问题。我的标题演示器中有很多链接。
Link1 - Link2 - Link3 - GuideDialogLink当用户点击 Link1 或 Link2 或 Link3 时,会打开一个新的浏览器。
但是,当用户点击 GuideDialogLink 时,它会在当前链接的顶部弹出一个对话框。
GuideDialog 的设计方式是根据用户停留的链接显示不同的 Gui。它的代码是这样的:
class GuideDialog extends DialogBox{
public GuideDialog(int whichLink){
if(whichLink==0){
//show Gui 1
}
else if(whichLink==2){
//show Gui 2
}
else if(whichLink==3){
//show Gui 3
}
}
}
例如,当用户停留在 Link3 并且如果他们点击 GuideDialogLink 时,如果用户停留在 Link1 或 Link2,它将显示一个具有 Gui3 的对话框,与 Gui1 或 Gui2 不同。
所以,我的问题是:
有没有办法找回当前的 Presenter?
如果我们知道哪个 Presenter 是当前的,那么我们可以相应地调用 GuideDialog 例如:GuideDialog myGD=new GuideDialog(0);
-其他解决方案是将public static int currentLink 存储在Utility 类中。当用户点击链接 1 或链接 2 或链接 3 时,我们可以使用 EventBus 设置 public static currentLink 以进行相应的设置并最终设置为 GuideDialog myGD=new GuideDialog(Utility.currentLink);。
但我不认为这个解决方案很优雅,因为谷歌必须有一些功能让我们知道我们在哪个当前页面。
那么我该如何优雅地解决我的问题呢?
编辑
好的,让我澄清一下。我正在使用 GWTP 创建我的 web 应用程序。
-1st,我使用eclipse生成HeaderPresenter。 Eclipse 将创建(HeaderPresenter.java、HeaderView.java 和 HeaderView.ui.xml)。 HeaderPresenter 有 4 个超链接:link1、link2、link3、GuideDialogLink。
-2nd,我创建了 Link1Presenter(Link1Presenter.java、Link1View.java、Link1View.ui.xml)。然后我创建了 Link2Presenter(Link2Presenter.java、Link2View.java、Link2View.ui.xml)。然后我创建了 Link3Presenter (Link3Presenter.java, Link3View.java, Link3View.ui.xml)
-3rd,我使用setInSlot 使 Link1Presenter、Link2Presenter、Link3Presenter 嵌入或嵌套在 HeaderPresenter 中。这意味着当用户转到链接 1(例如:abc.com#link1)时,他们将看到 4 个超链接(链接 1、链接 2、链接 3、GuideDialogLink)。如果他们转到链接 2(例如:abc.com#link2)或链接 3,他们还会看到 4 个超链接。
-4th,我在 HeaderPresenter 中创建 GuideDialog.java 扩展 DialogBox &,我有 guideDialogLink.addClickHandler(new ClickHandler(){ GuideDialog myGD=new GuideDialog (int whichLink); });
所以当用户在链接 1、2 或 3 中时,他们会看到 GuideDialogLink 对吗? & 当他们点击 GuideDialog 时会弹出一个对话框,对吗?
现在我的要求是,当用户在 Link1 中并且如果他们单击 GuideDialogLink 时,将弹出一个对话框并显示一个 Gui(上面有 2 个文本框)。当用户在 Link2 中并且如果他们单击 GuideDialogLink,将弹出一个对话框并显示另一个 Gui(上面有 2 个标签)。当用户在 Link3 中并且如果他们单击 GuideDialogLink,将弹出一个对话框并显示另一个不同的 Gui(上面有 2 个复选框)
【问题讨论】:
-
如果我错了,请纠正我,你想要的是将鼠标悬停在一个链接上,然后单击显示对话框按钮,对话框将显示与对应的演示者关联的视图,对吗?
-
不,当用户点击 GuideDialogLink 时,会弹出一个对话框,它不会打开新的浏览器。所以假设你在link1(my.com/link1)中并且你点击GuideDialogLink,那么你仍然在my.com/link1中&对话框将显示Gui1(比如1个按钮和2个文本框)。好的,现在你在 my.com/link2 中,你点击 GuideDialogLink,然后你还在 my.com/link2 中,对话框将显示 Gui2(可能有 4 个单选按钮 + 2 个标签)
-
所以,场景如下:我们有 3 个视图,每个视图都与对应的演示者相关联。然后我们得到:Link1-View1-Presenter1,依此类推。然后,如果您停留在 Link1 视图中,然后单击 GuideDialogLink,您将显示 Presenter1 检索到的一些 GUI。对吗?
-
感谢您提出的问题,是的,几乎是正确的,但是 Gui 可以是 Presenter1 的任何东西,但不是必需的,但 Gui 是基于 Presenter1 的。例如,Presenter 1 是关于产品的,那么 Gui 是产品的指南。如果 Presenter2 是关于 Service 的,那么 DialogBox 的 Gui 可以是 Service Guideline。