Открытие нового окна с виджетом в GWT - PullRequest
6 голосов
/ 12 ноября 2010

Прежде чем начать стрелять в меня, я проверил ответы, и я погуглил, пока у меня не потекли пальцы, но я не смог найти простой, краткий ответ. Поэтому я снова прошу всех тех, у кого может быть эта проблема.

Вопрос: как открыть новое окно с форпанелью в стороне.

Контекст: У меня есть приложение, которое перечисляет много элементов, я хочу, чтобы кто-то отредактировал запись, я хочу, чтобы открылось новое окно, чтобы они могли редактировать свойства, а затем нажать «Сохранить». Стандартная вещь, которую вы найдете во многих приложениях.

Архитектура: У меня есть один клиентский модуль с именем UI, он имеет десяток классов, которые рисуют виджеты и заполняют основную область при выборе из меню. У меня есть одна HTML-страница с именем UI.html, которая имеет тег в голове. Вот и все.

Опции Ive Seen

  1. Вызов Window.Open () , но вам нужно определить HTML-файл. У меня его нет. Я могу создать пустой, но как добавить в него виджет?

  2. используйте jsni $ wnd , чтобы создать новое окно и получить ссылку на него. Но как мне вставить панель формы в нее ??

  3. используйте popuppanel . Они выглядят отстойно - плюс, если открыть окно через JS довольно просто, я бы ожидал, что оно будет в gwt.

Может быть, я не понимаю, как использовать GWT, я не знаю.

Любая помощь будет оценена

Спасибо

Ответы [ 3 ]

12 голосов
/ 17 ноября 2010

То, как я это сделал, работает следующим образом: я написал метод 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");

я добавил базовое тело в новое окно и возвратил элемент body

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;
    }-*/;

Затем я вызвал этот метод из моего основного метода Java

BodyElement bdElement = getBodyElement();

Затем я вставил свою панель с множеством виджетов в возвращенный элемент тела

SystemConfiguration config = new SystemConfiguration();             bdElement.getOwnerDocument().getElementById("mainbody").appendChild(config.getElement());
1 голос
/ 12 ноября 2010

Я согласен с Богданом: используйте DialogBox.

Если вы не можете, вы Window.open(), как вы упомянули в варианте 1:

  1. Создайте еще один модуль GWT и файл form.html, который его загрузит
  2. Window.open("form.html?entry=54")
  3. Пусть модуль gwt формы прочитает URL, загрузит запись, разрешит ее редактирование и предоставит кнопки Save и Cancel
  4. Закрыть всплывающее окно при нажатии Save или Cancel
0 голосов
/ 12 ноября 2010

Разве вы не можете просто использовать DialogBox?

* ** 1003 тысяча два * Пример
...