Интеграция диалогового окна GWT в существующее HTML-приложение

У меня возникла ситуация, когда мне нужно интегрировать диалог gwt (который, насколько я понимаю, реализован в виде элемента div с манипулированием z-индексом) в существующую html-страницу.
Есть два сценария:
1. Что предпочтительнее и сложнее, так это то, что я даю хост-html-странице другую страницу, которую они встраивают как iframe, и я использую там свою магию (возможно, как-то подключиться к родительскому окну и установить мой диалог, я не уверен). < br> 2. Где у меня ограничен доступ к html странице и я подкладываю туда какой-то код, который будет загружать мое диалоговое окно.

Любые идеи или мысли о том, как я могу это реализовать?
Я работаю уже несколько месяцев с GWT и нашел его довольно хорошим, хотя я оставался далеко-далеко от всей области HTML, и до сих пор вся моя работа было сделано строго внутри моих классов java.
Спасибо за любые идеи и помощь
Ittai


person Ittai    schedule 24.12.2009    source источник


Ответы (1)


Я предполагаю, что под диалогом вы имеете в виду всплывающее окно, которое невидимо при загрузке страницы и становится видимым, скажем, при нажатии на что-то в существующем HTML. Простая стратегия, чтобы это произошло, заключается в обертывании существующего HTML.

У меня нет опыта работы с вариантом 1. Что касается варианта 2, все, что вам нужно изменить в существующем HTML, — это добавить импорт JS, например.

<script type="text/javascript" language="javascript" src="/com.your.org.Module/com.your.org.module.client.Module.nocache.js"></script>

затем добавьте идентификатор к некоторому кликабельному элементу, который вы хотите активировать в своем диалоговом окне, например.

<button id="launchDialog">Show Dialog</button>

и, наконец, добавление пустого div с идентификатором для вставки вашего диалога в DOM.

<div id="dialog"></div>

Тогда все, что вам нужно в вашем модуле, это

public class Module implements EntryPoint {

    @Override
    public void onModuleLoad() {
        Button b = Button.wrap(DOM.getElementById("launchDialog"));
        b.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                RootPanel panel = RootPanel.get("dialog");
                Widget w = ... // your dialog widget here
                panel.add(w); 
            }
        });
    }

}

Наконец, вы можете поиграть с видимостью вашего всплывающего блока с помощью стиля «display: none» и методов show() и hide() виджета.

person Bluu    schedule 29.12.2009
comment
Привет Bluu, во-первых, спасибо за ваш ответ. Я уже пришел к такому же выводу, но я хотел бы спросить вас (при условии, что доступен вариант 2), что html-страница, с которой я интегрируюсь, находится на другом сервере (даже IIS), есть ли способ сделать это? Как мне сообщить моему модулю, где находится мой сервер? если предположить, что СОП не является проблемой, большое спасибо - person Ittai; 29.12.2009
comment
Извините, я не заметил вашего комментария до сих пор! Итак, вы спрашиваете о полной загрузке вашего Javascript с другого сервера? Например, ‹script type=text/javascript language=javascript src=yourgwtserver.com/com.foo.bar.Module/› Я не могу на это ответить, так как я загрузил GWT только с того же сервера (т.е. использовал путь на сервере src=/com.foo.bar.Module/...). В этом случае не имеет значения, где вы скомпилировали GWT. Он поймет, где он находится. - person Bluu; 21.01.2010
comment
Вы можете подключить компонент GWT к div удаленно. Просто убедитесь, что вы используете компоновщик xs (см. code.google. com/webtoolkit/doc/latest/? ) Я не выполнял межсайтовые ссылки с помощью Button.wrap(), но RootPanel.get(yourid).add(yourcomponent) работает нормально. Если вы в конечном итоге используете компоновщик xs, есть и другие ограничения (главное из них — вы не можете использовать разделение кода). Надеюсь это поможет. - person mooreds; 02.07.2010