Реализация нескольких представлений через GWT-платформу?

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

У меня есть решение - добавить логику определения типа браузера в ClientModule, например:

if (browser == "iphone") {
    bindPresenter(HomePresenter.class, HomePresenter.MyView.class, HomeView.class, HomePresenter.MyProxy.class);
} else if (browser == "ipad") {
    bindPresenter(HomePresenter.class, HomePresenter.MyView.class, IPadHomeView.class, HomePresenter.MyProxy.class);
} else {
    bindPresenter(HomePresenter.class, HomePresenter.MyView.class, IPhoneHomeView.class, HomePresenter.MyProxy.class);
}

Мне интересно, можно ли использовать некоторые способы, такие как отложенная привязка в GWT-платформе. (но я хотел бы следовать структуре GWT-платформы, а не добавлять код отложенной привязки в xxx.gwt.xml).

Итак, мои вопросы:

1) Есть ли другие способы реализовать упомянутую выше функцию?
2) Какой способ лучше и почему?

Заранее спасибо!

С уважением,
Цзякуань В.


person Jake W    schedule 22.03.2012    source источник


Ответы (3)


GWT не позволяет вам устанавливать пользовательские типы агентов пользователя. Вы ограничены их набором из gecko, gecko1_7, safari, IE6, IE7, IE8 и Opera.

При этом вы можете получить доступ к пользовательскому агенту напрямую и настройте свою логику на соответствующее переключение с помощью Window.Navigator.getUserAgent() или через поставщика свойств.

См. аналогичный вопрос в разделе как определить мобильный браузер в GWT для MVP.

person Joseph Lust    schedule 22.03.2012
comment
Спасибо за ваш ответ, предоставленные вами ссылки могут помочь мне найти лучшее решение. - person Jake W; 22.03.2012

В папке образцов gwt есть пример, который делает то, что вы хотите. Я использую версию примера кода в своем проекте, за исключением использования Gin для обработки функциональности clientfactory. Образец называется mobilewebapp. Он включает использование метода форм-фактора в вашем .gwt.xml, чтобы определить, на какой системе вы работаете — в этом случае он разбивает ее на настольную, мобильную и планшетную. Затем позже в вашем gwt.xml он торгует клиентскими фабриками в зависимости от форм-фактора - вместо этого я торгую моделями джина. Вот ссылка на источник для mobilwebapp< /а>

person Deanna    schedule 22.03.2012
comment
Да, я заметил пример, который действительно хорош. Я тоже так планировал использовать. Я использую GWTP и GIN. Спасибо за Ваш ответ. - person Jake W; 23.03.2012
comment
Как вы использовали это в GIN? Спасибо. - person Jake W; 23.03.2012
comment
У меня есть разные модули Gin для настольных компьютеров, мобильных устройств и планшетов. Вместо замены фабрики клиентов я заменил модули gin. Модули gin содержат все то, что было бы в клиентской фабрике. - person Deanna; 23.03.2012

Проверьте группу gwtp google, это хороший источник, и кто-то разместил там pdf-файл о своих усилиях по решению проблемы саке. В любом случае, если я правильно помню, он содержит несколько модулей gin для каждого клиента с презентаторами и представлениями, запускает собственный код js при загрузке, а затем устанавливает правильный модуль в классе ginClinet.

person shukshuk    schedule 23.03.2012