Как объявить, что зависимый разрабатывает имена с UiBinder

У меня есть простой виджет 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?

Я знаю, что могу отключить путаницу для всего имени стиля. Но я хотел бы сохранить путаницу при использовании декораторов.

29
задан Eduard Wirch 13 January 2010 в 22:02
поделиться

2 ответа

Если вы хотите использовать этот стиль для всех ваших Textarea только для чтения , то я бы предложил просто модифицировать .gwt-Textarea-Readonly Стиль в вашем файле CSS Theme GWT.
В противном случае я могу думать только о добавлении вашего пользовательского стиля программно, когда вы устанавливаете Textarea только для чтения.

PS: из документов :

<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;)).

5
ответ дан 28 November 2019 в 01:58
поделиться

Почему бы вам не попробовать что-нибудь вроде этого

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>
5
ответ дан 28 November 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: