Динамические имена классов 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.


person Anupam Jain    schedule 19.03.2012    source источник
comment
Ну, я не уверен, какую часть вопроса я должен уточнить. По сути, CSSResource в GWT — это интерфейс с методом, который имеет однозначное сопоставление с классами CSS. Мне нужен один метод для генерации разных имен классов на основе параметров, переданных этому методу. Я мог бы легко написать этот метод сам, однако CSSResource является интерфейсом и не может иметь конкретных реализаций методов.   -  person Anupam Jain    schedule 19.03.2012


Ответы (2)


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

person Hilbrand Bouwkamp    schedule 19.03.2012
comment
Я пытаюсь использовать существующую систему сетки CSS, которая определяет такие классы, как size1 — size16, offset1 — offset16 и т. д. Это довольно обычная вещь для системы сетки CSS. Однако попытка вписать эту схему в GWT CSSResource заставляет меня натыкаться на одну стену за другой. Я, конечно, могу установить ширину и высоту (и другие свойства CSS) самостоятельно, но это сводит на нет всю суть CSSResource. - person Anupam Jain; 19.03.2012

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

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

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

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

person checketts    schedule 20.03.2012