2012-01-04 3 views
0

Мне очень нравится подход в GWT, где вы можете определить «divs», «spans» и т. д. на обычной странице html, затем в точке входа GWT просто нажмите кнопку или какой-либо другой компонент внутри div ,gwt; смешение html-страниц с кодом Java

Так маленький пример, вот фрагмент из GWT HTML страницы:

<body class='page'> 
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position: absolute; width: 0; height: 0; border: 0"></iframe> 

    <div> 
     Query Terms: <span id="txtQuery"></span>&nbsp; 
     <span id="btnQuery"></span><br> 
     ... 
    </div> 
</body> 

А вот небольшой ява фрагмент, содержащийся в точке входа GWT:

ClickHandler clickHandler = ... 
TextBox txtQuery = new TextBox(); 
Button btnQuery = new Button("Query", clickHandler); 

RootPanel.get("txtQuery").add(txtQuery); 
RootPanel.get("btnQuery").add(btnQuery); 

Одной из причин Мне нравится, что этот подход заключается в том, что он позволяет кодировщикам без java создавать/записывать html-материал, и мне также нравится разделение между кодом GWT/java и html-кодом.

Однако ... это может хорошо работать для простой веб-страницы, но как вы масштабируете этот подход на многих веб-страницах? Насколько я понимаю, «способ GWT» состоит в том, чтобы иметь одну веб-страницу и использовать историю, чтобы скрыть и показать различные компоненты GWT. Я построил 2 проекта в GWT, используя эту стандартную технику, но недавно обнаружил, что вы можете сделать то, что я показал выше.

Есть ли способ масштабирования вышеуказанных 2 фрагментов на несколько html-страниц, где GWT вводит свои компоненты в стандартные html-страницы?

ответ

1

Если цель состоит в том, чтобы дизайнеры работали над HTML, а не с Java, то как насчет UiBinder?Это даст вам то, что вы хотите (отдельный HTML-код, скорее, код XHTML-кода из Java-кода) внутри проект GWT.

+0

Спасибо, это похоже на то, что это может сделать трюк! – user85116

2

здесь нет GWT способ. По крайней мере, не в заявлении миссии GWT. Если вы хотите продолжить свой подход, вы можете сделать несколько способов.

Приложение GWT на страницу. (например, на каждой странице включено приложение gwt, специфичное для этой страницы). Вы просто компилируете новый модуль GWT для каждой страницы, где вам нужны некоторые функции GWT. Вы можете использовать несколько из них на одной странице, или нет. Этот подход хорош, если приложения GWT будут очень простыми, и вам не нужно использовать такие вещи, как GXT Grid, на каждой странице с разными настройками, иначе вы будете тратить время. Пользовательскому браузеру придется загружать большие куски JS-кода снова и снова, и это будет большой проблемой, если у вас много страниц.

Одно большое приложение GWT для всех страниц. Просто поместите все в одно приложение GWT, создайте какой-то переключатель (некоторую переменную js), чтобы приложение узнало, что ему нужно создать. Может быть использовано некоторое разделение кода, поэтому на каждой странице будут загружены только то, что действительно необходимо. Поскольку один и тот же JS будет использоваться на каждой странице, кеширование должно решить проблему с загрузкой кода приложения снова и снова (но у вас все еще есть проблема с фактическим разбором/запуском кода, когда пользователь меняет страницу)

Существует также третий подход, самый эффективный из всех, но самый сложный. Как только пользователь загружает одну из страниц, больше нет навигации, модуль gwt просто берет шаблон для страницы, к которой пользователь хочет перейти, и заменяет текущий код html новым шаблоном. Это довольно легко достичь, если вы будете использовать TextResource из ClientBundle и HTMLPanel. Проблема заключается в навигации в поле адреса (приложение GWT должно нести ответственность за изменение адреса, чтобы пользователи могли создавать закладки или отправлять ссылку своим друзьям). Для этого вы используете один сценарий GWT, и рекомендуется некоторое разделение кода.

Все три подхода полностью действительны, в зависимости от ваших требований вы можете выбрать любой из них. Кроме того, если вы хотите, чтобы предоставить людям возможность использовать HTML для макетов GWT-экранов, вам может потребоваться использовать комбинацию HtmlPanel и TextResource от ClientBundle.

+0

Спасибо за подробный ответ; Я расскажу об этом более подробно позже, но пока думаю, что я собираюсь попробовать UiBinder, как предложил Томас. – user85116

Смежные вопросы