Динамические имена классов CSS в GWT - PullRequest
4 голосов
/ 19 марта 2012

Я в процессе портирования простой системы CSS-сетки на GWT. Мой файл CSS в настоящее время содержит классы, такие как .size1, .size2 и т. Д., И у меня есть ресурс CSS, который выглядит как -

interface MyResource extends CSSResource {

  @ClassName("size1")
  String size1();

  @ClassName("size2")
  String size2();

  // And so on
}

Однако, что я действительно хочу, так это иметь одну функцию, подобную следующей -

String size(int size);

, который будет генерировать соответствующий класс при передаче размера в виде целого числа во время выполнения. Это необходимо, поскольку я выполняю некоторые вычисления, чтобы определить фактическое пространство, доступное / необходимое для виджета в javascript, а затем присоединяю соответствующее имя класса.

Возможно ли это даже с помощью GWT?

Редактировать : Чтобы уточнить, я легко могу написать такой метод, например, так: *

String size(int size) {
  switch(size) {
    case 1: return size1();
    case 2: return size2();
    ... and so on
  }
}

Однако MyResource - это интерфейс, и его реализация генерируется GWT во время выполнения. Это означает, что я не могу добавить свой метод size к типу MyResource. Итак, я думаю, что я прошу способ добавить пользовательские методы в класс MyResource.

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Вы не можете передавать имена методов в CSSResource.

Помните, что цель CSSResource - минимизировать и скрыть имена классов CSS.

Однако, если CSS Resource может сделать это, это не означает, что вы должны использовать его для всего своего кода.

Например, вы уже знаете, что методы CSS Resource возвращают строку, поэтому просто создайте свой собственный метод, который возвращает строку (имена ваших динамических классов), и для загрузки вашего CSS используйте @CssResource.NotStrict аннотация при добавлении его на ваш ресурс.

1 голос
/ 19 марта 2012

Я думаю, вам не следует пытаться решить эту проблему с помощью CSS-файлов, но если вы хотите иметь динамические значения в своем стиле, вы должны установить эти значения в коде с помощью myWidget.getElement().getStyle().setSomeCssMethod(). Или в этом случае вы, кажется, хотите установить размер, как по высоте, так и по ширине. Для большинства виджетов эти значения могут быть установлены напрямую. Если я что-то упускаю, почему вы хотите использовать классы CSS и не устанавливать это непосредственно в коде?

...