在GWT中连接两个DialogBox

时间:2010-04-13 07:15:38

标签: api gwt google-maps dialog

在我的GWT项目中,我试图获得它,因此两个DialogBoxes可以在彼此之间传递信息。其中一个持有MapWidget,当在另一个DialogBox中按下一个按钮时,从另一个DialogBox的MapWidget接收位置信息。有没有人有任何关于如何在两个不同的DialogBoxes出现之间进行协调的提示?我应该在Composite中包装两者的代码吗?此外,还有一个例子可以在GWT中同时处理两个DialogBoxes吗?例如,如果我在两个框之外单击,则两个框都应该被关闭。我想知道是否有办法让它们立刻保持对焦,所以我可以在两者之间切换而不会导致它们消失。

1 个答案:

答案 0 :(得分:1)

在对话框之间共享数据

在我看来,执行此操作的“正确”方法是在应用程序中实现某种MVP structure,以便演示者管理视图(DialogBox es,以及其他内容)和知道如何将简单数据传递给视图以供显示(演示者将处理MapWidget数据,视图将负责在DOM上显示它。)

但是,如果您正在寻找更快/更简单的方法,您有几个选项(您选择的选项实际上取决于应用程序结构):

  1. 如您所述,创建一个Composite,知道如何来回传递必要的数据。通过让Composite管理数据对象并告诉两个DialogBox es如何显示它,您实际上是在Composite中接近MVP架构。
  2. 将类DialogBox子类化为包含HandlerManager(有时用作“事件总线”)的类,该按钮在按下按钮时会触发事件。您可以创建旨在在两个DialogBox之间来回传递数据的事件(甚至使用类型参数使其类型安全)。有关使用HandlerManager的详细信息,请参阅this StackOverflow question。上面链接的MVP文章也有一些good information on using an event bus
  3. Model-View-Presenter是一种经过验证的构建应用程序的方法,可以生成更多可测试的代码,更好的项目结构,并可以帮助指导您做出这样的决策。如果您还没有,我强烈建议您查看。

    分享自动隐藏功能

    GWT的PopupPanelDialogBox所基于的)提供了一种方法addAutoHidePartner(Element),如下所述:

      

    autoHide合作伙伴中发生的鼠标事件不会将面板设置隐藏为自动隐藏。

    因此,您可以使用以下代码创建两个自动隐藏DialogBox es,只有当您在两个框内单击时才会关闭它们(例如,当您在任一框中单击时它们不会关闭): / p>

    // Create the dialog boxes
    DialogBox dbox1 = new DialogBox(true, false);
    DialogBox dbox2 = new DialogBox(true, false);
    // Set some visual options
    dbox1.setPopupPosition(10, 10);
    dbox2.setPopupPosition(200, 10);
    dbox1.setAnimationEnabled(true);
    dbox2.setAnimationEnabled(false);
    // Set the dialog boxes' caption and content
    dbox1.setHTML("Dialog Box 1");
    dbox2.setHTML("Dialog Box 2");
    dbox1.setWidget(new HTML("This is the first dialog box."));
    dbox2.setWidget(new HTML("This is the second dialog box."));
    // Making dobx2 a partner of dbox1 means clicking
    // in dbox2 won't cause dbox1 to close
    dbox1.addAutoHidePartner(dbox2.getElement());
    // Similarly, setting dbox1 as a partner of dbox2 means
    // clicking in dbox1 won't cause dbox2 to close
    dbox2.addAutoHidePartner(dbox1.getElement());
    // Show the dialog boxes
    dbox1.show();
    dbox2.show();
    

    您可以与任一对话框进行交互,而无需关闭其他对话框。如果您只想要单向合作,请忽略对setAutoHidePartner的适当电话。