Какие свойства отложенного связывания используются в операторе GWT CSSResource @if?
В настоящее время я пытаюсь использовать условный CSS в файле CssResource, как описано здесь, но мне немного неясно "<deferred-binding-property>
" часть.
Где должны быть определены эти свойства? Я хотел бы думать, что любой <define-property>
тег в дереве наследования модуля, который в данный момент компилируется, будет доступен, но это не так. Я серьезно не могу найти какую-либо документацию этого онлайн.
В моем случае проект, над которым я работаю, состоит из двух приложений, каждое из которых имеет свой собственный модуль GWT, но оба они наследуют "основной" модуль, который содержит общий код, включая ClientBundle/CssResource с @if
заявления. Свойство отложенной привязки, которое я хочу оценить, определено в другом файле модуля gwt, formfactor.gwt.xml.
Я пытаюсь использовать следующее:
@if formfactor mobile{
.wrapper{
top:50px;
}
}
Все gwt-компилируется без ошибок. Любая отложенная привязка в самих файлах модуля, основанная на свойстве "formfactor", оценивается правильно (т.е. я получаю "мобильные"-специфичные представления, как и ожидалось). Ни одно из правил CSS в @if
блок вводится.
Я попытался унаследовать formfactor.gwt.xml как в основном файле gwt.xml, так и в файлах приложения gwt.xml, и оба работали, как описано в предыдущем абзаце.
Если я включу @else
оператор в файле CssResource, код в @else
блок действительно вводится, но если я включу @elif formfactor desktop tablet
(единственные два других значения, определенные для свойства formfactor), то ни @if
блок ни @elif
блок вводится.
обновление- хотя я все еще думаю, что было бы полезно получить окончательный ответ на вопрос, похоже, что мой файл CssResource действительно имеет свойство formfactor в области видимости. Эта проблема, похоже, связана с проблемой GWT 4697 (code.google.com/p/google-web-toolkit/issues/detail?id=4697
), где заключительное предложение оператора @if/@elif/@else всегда вводится независимо от значения оцениваемого свойства defferred-binding-свойства.
Одним из обходных путей в моей ситуации было просто установить "стандартное" значение в обычном CSS, а затем вручную изменить значение в блоке @if, например:
.wrapper{
top:66px;
...
}
@if formfactor mobile {
.wrapper{
top:50px;
}
}
Пока вы не используете операторы @def внутри условного выражения, второе правило будет введено только в том случае, если условное выражение имеет значение true.
Я понимаю, что это может не работать со всеми правилами CSS, так как оно по существу определяет второе значение для правила без удаления первого значения, но это всего лишь обходной путь!