Я разрабатываю некоторые виджеты в библиотеку для внутреннего пользования в компании, на которую я работаю.
Я не знаю то, что является рекомендуемым способом разработать виджеты.
Существуют, по крайней мере, эти пути:
используйте Widget.setPrimaryStyleName и позвольте пользователю предоставить внешнюю CSS. Мы используем архетипы знатока для создавания приложений, таким образом, мы можем обеспечить стили по умолчанию. Так или иначе мне не нравится он очень.
используйте GWT 2.0 CssResourceBundle. Таким образом, мы можем скомпилировать CSS в модуль, и он будет оптимизирован (и это может быть иждивенец браузера также).
предоставьте модулю моделирование. Что-то как темы GWT по умолчанию. Но я не знаю, как точно это работает.
Я хочу:
Каков Ваш опыт в этом предмете?
Примечание: если Вы ищете категорический ответ, просматривают все ответы и комментарии. Существуют различные идеи и все хорошие. Затем выберите то, что является лучшим для Вас :)
Я думаю, что лучший способ - предоставить стили в модуле. Таким образом, вы сможете легко изменить стиль или добавить «темы» для элементов управления.
Я делаю аналогичный проект, который размещен на github ( http://github.com/markovuksanovic/gwt-styles ), так что вы можете проверить это. Вы можете загрузить файл jar, включить его в свой проект и указать в своем модуле xml, что вы хотите использовать этот стиль .. sth like
<inherits name='gwt.theme.flick.Flick'/>
Я бы посоветовал вам использовать новый модуль для ваших стилей, чтобы вы могли легко переключаться между стилями ... (просто измените тег наследования).Так, например, если один из ваших виджетов использует класс css «my-widget», у вас будет модуль «style» (или несколько модулей), который будет определять этот класс css (в файле css) - таким образом вы могли бы иметь несколько модулей, реализующих этот класс css, и переключаться между ними будет так же просто, как изменить имя модуля в теге наследования. Таким образом вы получите красиво отделенный код - стили не будут зависеть от технической реализации виджетов. Если у вас есть еще вопросы, не стесняйтесь их задавать.
P.S. Я забыл упомянуть выше - обратите особое внимание на то, как построен модуль стиля (build.xml), это немного сложно. Вы можете найти дополнительную информацию о создании модулей в следующей ссылке http://developerlife.com/tutorials/?p=229
Если вы просто пишете новый виджет и хотите, чтобы люди могли настраивать его CSS, то я использовал один шаблон:
public class MyWidget extends Composite {
public interface MyCss extends CssResource {
...
}
private static MyCss defaultStyle;
private static MyCss ensureDefaultStyle() {
if (defaultStyle == null) {
defaultStyle = GWT.create(DefaultResourceBundle.class).css();
}
return defaultStyle;
}
/** If you want to use default style, call this */
public MyWidget() {
this(ensureDefaultStyle());
}
/** If you want to use your custom style, call this */
public MyWidget(MyCss css) {
...
}
}
Таким образом, ваша библиотека виджетов может предоставлять интерфейс CSS и реализацию для него по умолчанию. Если ваш пользователь хочет настроить его, он может привязать интерфейс CSS к файлу css по своему выбору в своем собственном пакете ресурсов и вместо этого использовать второй конструктор.