2012-01-11 4 views
0

Как достичь многостраничного с GWT, так что приложение gwt может иметь несколько EntryPoint, которые отображаются на html.Как достичь GWT multipage

Как HomeEntryPoint сопоставляется с home.html и EditEntryPoint отображенной на edit.html и так далее. Так что для загрузки EntryPoint это доступ по URL-адресу, подобным этому: http://localhost:8080/home.html или http://localhost:8080/edit.html

Сейчас я использую GWT Multipage, но я думаю, что он больше не поддерживается. И у меня есть некоторые проблемы, которые я не могу исправить прямо сейчас.

Issue как this.

ответ

1

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

Есть несколько способы сделать что-то подобное. Самый быстрый/самый простой - перечислить все ваши точки входа в файле модуля, а в верхней части каждого onModuleLoad сделать чек, если он находится на правильной странице. Нечто подобное (настраивается для каждой страницы/EntryPoint конечно):

if (!Window.Location.getPath().toLowerCase().endsWith("myhtmlpage.html") { 
    return; 
} 

GWT компилирует все точки входа (и все зависимости классов, чтобы просто сделать один набор файлов, каждый класс загружается только один раз) в один JS файл и все точки входа будут запущены, но они остановятся, если они не будут запущены в это время.

Дальнейшим шагом было бы изменить это, чтобы использовать аннотацию для каждой точки входа и генератор для всех точек входа. (Знаете ли вы, что ваш экземпляр entrypoint создан с помощью GWT.create? Это правда!), Что бы переопределить onModuleLoad и добавьте эту логику автоматически.

Отредактировано использовать GetPath() вместо getHref(), и toLowerCase(), что строка для того, чтобы никаких проблем случае не возникают

+0

Умное решение с getHref(), поэтому я просто поставлю запись класса entrypoint с файлом module.gwt.xml в свой код? – xybrek

+0

wait, btw, так как проверка с концамиWith («something.html»), это будет иметь проблемы с идентификаторами фрагментов и параметрами URL, я прав? – xybrek

+0

Отличный момент, извините, что я пропустил это ... Исправляя его теперь, чтобы использовать window.location.pathname (Location.getPath() в gwt) –

0

Как насчет просто сделать их отдельные приложения, составленные отдельно?

+0

Да, это, безусловно, окончательное решение, но прямо сейчас для моего прототипа мне просто нужно сделать все в одном месте. – xybrek

+0

Как использовать отдельные модули, несовместимые с наличием «всего в одном месте»? Просто передайте несколько имен модулей в DevMode или Compiler вместо одного; и плагин Google для Eclipse делает это очень просто, если это то, что вы используете. –

+0

Одним из преимуществ только одного модуля является то, что пользователю нужно только ждать одной большой загрузки, особенно если есть несколько совпадений в разных частях приложения - используя только класс Widget, и его зависимости приводят к загрузке около 45 тыс. и, конечно, более крупные классы означают больше js для спуска. –