在GWT中创建模态对话框

时间:2011-08-20 05:36:14

标签: java gwt callback synchronization

我是一个GWT和Java新手试图找出如何在GWT中创建同步(模态)对话框,但我遇到了困难。 DialogBox类有一个标志:

modal - 如果应忽略对话框中未包含的小部件的键盘和鼠标事件,则为true

但这不会使对话同步。

我读到一条建议,说我需要放置处理用户在OK按钮处理程序中输入的对话框数据的代码。我不喜欢这样,因为它使对话框负责显示数据并处理它。这导致了“关注点分离”,并违反​​了良好设计的“单一责任原则”。

我将要执行的代码放在OK按钮处理程序中,现在想要在我的代码中的两个位置使用我的GWT对话框。在一种情况下,当按下OK按钮时,来自对话框的用户数据被添加到表中。在另一种情况下,按下OK按钮时会修改表格中的数据。如果我可以创建一个真正的同步对话框,我可以在执行返回时轻松处理对话框外的OK按钮,并轻松地重用对话框。

如果被迫使用我当前的异步模型,我需要传递here所述的其他数据。对于这样一个共同的任务来说,这似乎是很多工作。我错过了什么?还有其他选择吗?

3 个答案:

答案 0 :(得分:4)

模态标志基本上使对话框成为UI的焦点。因此,除了对话框中的内容之外,没有任何其他内容可以被点击或交互。

不幸的是,正如您所知,JavaScript(GWT)本质上是异步的 - 在浏览器中,在用户执行触发事件之前,不会执行任何JS代码。所以这是我们必须回应的事件。

据我所知,GWT不提供同步对话框。如果是这样,那就意味着引入了一段阻塞代码。由于JavaScript是单线程的,这会将您的应用程序锁定在忙碌的等待中 - 这意味着您无法在对话框本身或其他任何地方进行任何有意义的处理。

我将如何处理它:

  • 创建我自己的模态对话框类,包含一个GWT DialogBox,我将实现对话结果,例如:SAVE / OK / CANCEL按钮。
  • 提供通知事件或回调 - 例如onDialogExit,其中对话结果/ OK / CANCEL / SAVE / ANYTHING将提供给感兴趣的一方。当用户执行操作(例如单击按钮)退出对话框时,只需引发正确的事件即可。如果需要从对话框中获得某些数据,则事件也可以返回值。
  • 为需要处理对话结果的事件提供回调。

这与您提到的函数指针链接非常相​​似 - 您只是在编写自己的事件。

答案 1 :(得分:0)

查看DialogBox。您可以使用其中一个构造函数使其成为模态。

答案 2 :(得分:0)

有一种比异步方法更好的方法。

boolean okPressed = Window.confirm("Your Message Here");

您的申请将保留,直到用户按下“确定”状态为止。或者'取消'并且您可以处理返回的布尔值。

不幸的是,您无法更改“确定”的文字。和'取消'的按钮。