2010-11-12 41 views
6

在开始拍摄我之前,我已经检查了答案,并且使用了Google搜索,直到我的手指流血,但是我还没有找到简单,简洁的答案。所以我再次问所有那些可能有这个问题。在GWT中使用Widget打开新窗口

问题:如何用一个formpanel打开一个新窗口。

上下文:我有一个应用程序列出了很多项目,我希望有人编辑一个条目,我想打开一个新窗口,以便他们可以编辑属性,然后点击保存。一个标准的东西,你在很多应用程序中找到。

架构: 我有一个称为UI一个客户端模块,它有画小部件和从菜单中选择时必须填写主地区十几类。我有一个名为UI.html的HTML页面,头部有标签。而已。

选项我见过

  1. 呼叫Window.Open(),但你需要定义一个HTML文件。我没有。我可以创建一个空的,但你怎么注入一个小部件?

  2. 使用jsni $ wnd创建一个新窗口并获得对其的引用。但我如何注入一个表单面板?

  3. 使用a popuppanel。他们看起来很烂 - 再加上如果通过JS打开一个窗口非常简单,我期望它在gwt中。

也许小姐理解如何使用GWT我不知道。

任何帮助,将不胜感激

感谢

+0

最佳答案,我所看到的是:https://groups.google.com/forum/?fromgroups#!topic/google-web-toolkit/G73s5fqpYBg – 2012-07-19 08:38:55

回答

1

我同意波格丹:使用对话框。

如果你不能,你Window.open()你在选项1中提到:

  1. 创建另一个GWT模块和形式。HTML代码,加载它
  2. Window.open("form.html?entry=54")
  3. 已经从URL中读取的形式GWT模块,加载项,允许它进行编辑,并提供SaveCancel按钮
  4. 点击SaveCancel时关闭弹出
+0

谢谢你们的快速回复。我的牛肉与对话框没有窗框,也没有典型的窗户外观,网址等。 – Primus 2010-11-12 19:13:13

12

我得到这个工作的方式如下: 我写了一个JSNI方法打开一个新窗口

public static native BodyElement getBodyElement() /*-{ 
     var win = window.open("", "win", "width=940,height=400,status=1,resizeable=1,scrollbars=1"); // a window object 
     win.document.open("text/html", "replace"); 

我增加的基体为新的窗口,并返回所述主体元件

win.document.write("<HTML><HEAD>"+css1+css2+"</HEAD><BODY><div class=\"mainpanel\"><div style=\"width: 100%; height: 54px;\"><div id=\"mainbody\"class=\"mainbody\" style=\"width: 100%;\"></div></div></div></BODY></HTML>"); 
     win.document.close(); 
     win.focus(); 
     return win.document.body; 
    }-*/; 

i,那么调用此方法从我的主要Java方法

BodyElement bdElement = getBodyElement(); 

我然后注入我的面板,其具有大量的小部件到返回body元素

SystemConfiguration config = new SystemConfiguration();    bdElement.getOwnerDocument().getElementById("mainbody").appendChild(config.getElement()); 
+0

+1也用于分享您的解决方案。 – nikhil 2013-03-13 11:32:42