У меня есть простой виджет UiBinder, содержащий TextArea:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:TextArea visibleLines="3" />
</ui:UiBinder>
Я хочу управлять цветом фона этой текстовой области для записываемых и состояний только для чтения. GWT использует "-" декоратор имени стиля только для чтения для достижения этого. Таким образом, я пробую это:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.textBoxStyle {
background-color:yellow;
}
.textBoxStyle-readonly {
background-color:lightgray;
}
</ui:style>
<g:TextArea styleName="{style.textBoxStyle}" visibleLines="3" />
</ui:UiBinder>
Очевидно, это не будет работать, потому что имена стиля запутываются для CssResources, приводящего к чему-то вроде этого:
.G1x26wpeN {
background-color:yellow
}
.G1x26wpeO {
background-color: lightgray;
}
Результат HTML для записываемой текстовой области похож на это:
<textarea tabindex="0" class="G1x26wpeN" rows="3"/>
Текстовая область только для чтения похожа на это:
<textarea tabindex="0" class="G1x26wpeN G1x26wpeN-readonly" readonly="" rows="3"/>
Как я объявляю стиль, таким образом, GWT запутает основную часть, но не "-только для чтения" decdorator?
Я знаю, что могу отключить путаницу для всего имени стиля. Но я хотел бы сохранить путаницу при использовании декораторов.
Если вы хотите использовать этот стиль для всех ваших Textarea только для чтения
, то я бы предложил просто модифицировать .gwt-Textarea-Readonly
Стиль в вашем файле CSS Theme GWT.
В противном случае я могу думать только о добавлении вашего пользовательского стиля программно, когда вы устанавливаете Textarea
только для чтения.
<set-configuration-property name="CssResource.obfuscationPrefix" value="empty" />` can be used for minimal-length selector names, but this is only recommended when the GWT module has total control over the page.
Я рекомендую использовать это (с «пустым» или «X» или другим неиспользуемым префиксом) для гораздо более коротких имен классов - потому что по умолчанию вы не делаете Получите так много через запутывание (TextBoxStyle - 12Chars, G1X26WPEN - 9CHARS, X0 - 2 CHARS;)).
Почему бы вам не попробовать что-нибудь вроде этого
public class MyFoo extends Widget {
interface MyStyle extends CssResource {
String normal();
String readonly();
}
@UiField MyStyle style;
/* ... */
void setEnabled(boolean enabled) {
getElement().addStyle(enabled ? style.normal() : style.readonly());
getElement().removeStyle(enabled ? style.readonly() : style.normal());
}
}
, это позволит вам изменить стиль, если текстовое поле "нормальное" или только для чтения ...
И, конечно же, в UiBinder у вас должно быть что-то вроде
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
<ui:style type='com.my.app.MyFoo.MyStyle'>
.redBox { background-color:pink; border: 1px solid red; }
.normal { color:black; }
.readonly { color:gray; }
</ui:style>
<div class='{style.redBox} {style.normal}'>I'm a red box widget.</div>
</ui:UiBinder>