Получить виджет UiBinder для отображения встроенного вместо блока - PullRequest
2 голосов
/ 20 марта 2010

Я пытаюсь, чтобы мой виджет, определенный в UiBinder, отображался встроенным, но я не могу. Мой текущий код:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'>
  <ui:style>
    .section {
      border: 1px solid #000000;
      width: 330px;
      padding: 5px;
      display: run-in;
    }
  </ui:style>

  <g:HTMLPanel>
    <div class="{style.section}">
      <div ui:field="titleSpan" class="{style.title}" />
      <div class="{style.contents}">
        <g:VerticalPanel ui:field="messagesPanel" />
      </div>
    </div>
  </g:HTMLPanel>
</ui:UiBinder>

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

<g:HTMLPanel styleNames="{style.section}">

И я могу назначить дополнительный стиль, но он не применяет настройку дисплея.

<g:HTMLPanel addStyleNames="{style.section}">

Это отображает границу и устанавливает размер, как и ожидалось, но не течет. Firebug показывает стили на div: границы, ширина и отступы, но без отображения.

Есть ли способ сделать виджет в UiBinder, чтобы он отображал встроенный вид вместо блока? И если да, могу ли я сделать его совместимым с наличием внутри VerticalPanel (могу ли я сделать это без превращения всего виджета в чистый HTML без каких-либо виджетов GWT)?

PS : я видел вопрос 2257924 , но в последнее время на него не было никаких ответов, и он, кажется, сосредоточился на получении тега, а не на конкретной компоновке. Меня не волнует напрямую, если я смогу просто сделать тег верхнего уровня для моего виджета встроенным, я счастлив.

Ответы [ 2 ]

3 голосов
/ 20 марта 2010

Кажется, ваша проблема вызвана использованием display: run-in вместо более "стандартного" display: inline. IE и Firefox не поддерживают run-in, и кажется, что Firebug сокращает стиль при добавлении.

Попробуйте изменить стиль на display: inline (или inline-block, если вам нужны некоторые свойства блока, например, ширина, но остерегайтесь причуд IE + inline-block).

2 голосов
/ 22 марта 2010

Это должно быть <g:HTMLPanel styleName="{style.section}">, а не <g:HTMLPanel styleNames="{style.section}"> - styleNames - это опечатка (которая встречается в документации по UiBinder, поэтому я уверен, что вы ее взяли). styleName - правильная вещь для использования.

Также, Игорь Климер прав, что вы должны использовать display: inline или display: inline-block вместо display: run-in.

В общем, вы можете узнать доступные имена атрибутов, посмотрев методы setXXX в классе UIObject , а имя атрибута - просто XXX. Итак, UIObject имеет метод setStyleName, доступ к которому осуществляется с помощью атрибута с именем styleName.

...