Динамические имена классов CSS в GWT

Я нахожусь в процессе портирования простой системы сетки 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 ответа

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

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

Помните, что целью CSSResource является минимизация и запутывание имен классов CSS.

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

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

Другие вопросы по тегам