GWT разделяет стили CSS не работает
Мне нужно использовать один и тот же стиль в нескольких шаблонах Binder UI, поэтому я сделал все, как описано в: https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder.
Итак, я сделал следующее:
1. Создан интерфейс ресурсов:
Открытый интерфейс Ресурсы расширяет ClientBundle { @Source("shared.css") Стиль стиля (); Открытый интерфейс Стиль расширяет CssResource { Строка grayedOut (); } }
2. Создано shared.css
файл в том же каталоге, что и класс Resources:
.серым цветом{ цвет фона: красный; }
3. Добавлено with
элемент в шаблон пользовательского интерфейса Binder:<ui:with type="correct.package.Resources" field="res"/>
4. Добавлена ссылка на стиль в шаблоне UI Binder: addStyleNames="{res.style.grayedOut}"
Однако это не работает. Представление отображается так же, как стиль grayedOut вообще не применялся.
Но я заметил две вещи:
- В Firebug/Chrome Dev Tools я вижу, что элементу присвоено название стиля, соответствующее стилю, который я пытаюсь добавить:
class="GAWERH0MI gwt-TabLayoutPanelContent"
(GAWERH0MI
похоже соответствуют моемуgrayedOut
класс), но я не могу найти его на панели "Стили элементов", что, вероятно, означает, что этот класс пуст (без тела). (Я провел эксперимент и назначил пустой класс элементу с тем же эффектом в этих инструментах). - Когда я изменяю имя стиля в.css, я получаю ошибку во время выполнения этого стиля
grayedOut
не может быть найдено, что означает, что мой класс стиля обычно успешно найден, но по какой-то причине не работает должным образом.
2 ответа
Вы, вероятно, забыли позвонить ensureInjected()
на Resources.Style
пример.
Это делается автоматически для <ui:style>
(потому что вы не кодируете ClientBundle
а также CssResource
интерфейсы, они создаются для вас UiBinder), но не для каких-либо других CssResource
,
Ты можешь использовать @UiField Resources res
тем не менее, это будет введено со значением <ui:with field="res">
и, таким образом, вызвать res.style().ensureInjected()
сразу после звонка createAndBindUi
,
ИМО, однако вы бы лучше ввести Resources
экземпляр на ваш взгляд и использовать @UiField(provided=true)
и, таким образом, либо убедитесь, что ensureInjected()
вызывается до того, как экземпляр внедряется в ваше представление, или выберите вызов ensureInjected()
в каждом из ваших взглядов. Как в https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder
UI виджет Java-файл:
@UiField
Resources res;
public YourWidget() {
initWidget(uiBinder.createAndBindUi(this));
res.style().ensureInjected();
}
UI виджет XML-файл:
<ui:with field='res' type="your path to Resource class" />
а также
<g:Label addStyleNames="{res.style.grayedOut}" ui:field="icon"></g:Label>