#css #gwt #uibinder
#css #gwt #uibinder
Вопрос:
Для моего приложения GWT я хочу отобразить выбранную строку в гибкой таблице, и для этой цели я добавляю стиль к конкретной строке:
@UiField FlexTable productTable;
int row;
[...]
/* select row */
productTable.getRowFormatter().addStyleName(row, "row-selected");
В соответствующем ui.xml файл, у меня есть стиль, добавленный следующим образом:
ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:u="urn:import:myapplication.client.ui">
<ui:style>
tr.row-selected {
background: #92C1F0;
}
</ui:style>
<g:VerticalPanel>
<g:ScrollPanel>
<g:FlexTable ui:field="productTable" width="100%" height="100%">
</g:FlexTable>
</g:ScrollPanel>
</g:VerticalPanel>
</ui:UiBinder>
Это не работает, хотя добавление стиля в мой файл global .css работает. В FireBug я вижу, что имя tr.row-selected искажено во что-то вроде: tr.GB1HWLGEI
Почему это не работает и как это должно работать вместо этого?
Ответ №1:
UiBinder использует ClientBundle
for ui:style
, поэтому применяются правила и синтаксис / особенности CssResource
.
Это означает, что имена ваших классов CSS будут запутаны (чтобы они были уникальными и не конфликтовали с одноименным классом CSS из другой CssResource
или внешней таблицы стилей).
В вашем случае вы можете либо определить CssResource
интерфейс, либо объявить ui:style
, чтобы расширить этот интерфейс и внедрить экземпляр в @UiField
; таким образом, вы можете использовать запутанный стиль в свой addStyleName
; как в http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html#Programmatic_access
Или вы можете использовать @external
в своем ui:style
, чтобы отключить запутывание для класса CSS; см. http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html#External_and_legacy_scopes .
Комментарии:
1. Спасибо, я буду использовать @external, потому что мне не нужен программный доступ к стилям, и его использование — это самый простой способ определить мой стиль в .ui.xml досье.
2. Ну,
productTable.getRowFormatter().addStyleName(row, "row-selected");
для меня это подразумевает «программный доступ»: добавьте@UiField MyStyle style;
и затемproductTable.getRowFormatter().addStyleName(row, style.rowSelected());
, и вы получите гарантированную уникальность запутанного имени класса CSS.
Ответ №2:
Искаженный действительно запутан, что будет быстрее в браузере и сложнее для кого-то перепроектировать. Это также означает, что вам не нужно беспокоиться о конфликтах пространства имен css.
Итак, просто используйте следующую строку в вашем ModuleName.gwt.xml файл во время разработки, чтобы отключить обфускацию.
<set-configuration-property name="CssResource.style" value="pretty" />
Комментарии:
1. Это set-configuration-property, а не extend-… : CssResource.style не является многозначным, поэтому его нельзя расширить.
2. Моя ошибка. Исправлено. Спасибо, Алекс.