#css #gwt #sprite #cssresource #clientbundle
#css #gwt #sprite #cssresource #clientbundle
Вопрос:
Я пытаюсь использовать CssResource и ImageResource вместе в проекте GWT2.2.
CssResource и обфускация работают должным образом, но у меня возникают проблемы с доступом к изображениям.
Я уже могу получить доступ к изображениям через ImageResource непосредственно из ui.xml файлы следующим образом:
<ui:with type="com.example.client.resource.ResourceBundle" field="myResource"/>
<g:Image resource="{myResource.image}"/>
Но я не могу прикрепить источник изображения из внешних css-файлов с помощью @sprite.
У меня есть следующие интерфейсы:
public interface ResourceBundle extends ClientBundle {
ResourceBundle INSTANCE = GWT.create (ResourceBundle.class);
@Source("com/example/client/resource/images/image.png")
ImageResource image();
@Source("com/example/client/resource/css/mystyle.css")
MyCssResource myCssResource();
}
public interface MyCssResource extends CssResource {
String className();
}
И когда я добавляю спрайт в css-файл,
@sprite .className {
gwt-image: 'image';
}
Я получил следующее сообщение об ошибке:
[ERROR] - Unable to find ImageResource method value("image") in
com.example.client.views.MyView_BinderImpl_GenBundle : Could not find
no-arg method named image in type com.example.views.MyView_BinderImpl_GenBundle
Комментарии:
1. Ссылаетесь ли вы
mystyle.css
откуда-либо еще, кроме вашего ClientBundle? У вас есть<ui:style>
ссылка вMyView.ui.xml
?2. Да, я ссылаюсь на mystyle.css как из ClientBundle, так и из UiBinder. У меня есть следующая ссылка:
<ui:style src="../resource/css/mystyle.css" />
Нужно ли мне ссылаться на него и из других мест?
Ответ №1:
Вы можете получить доступ к своим стилям из шаблонов UiBinder следующим образом:
<ui:with type="com.example.client.resource.ResourceBundle" field="myResource"/>
<g:FlowPanel styleName="{myResource.myCssResource.className}"/>
Комментарии:
1. Да, я уже получаю доступ к нему
ImageResource
из своегоUiBinder
таким же образом, как вы показываете здесь. Но чего я не могу сделать сейчас, так это получить доступ к источнику изображения из внешних css-файлов, как показано в разделе Фоновые изображения / спрайты CssResourceCookBook2. Можете ли вы опубликовать содержимое
MyView.ui.xml
в своем вопросе? Я покажу вам, как это исправить.3. Ну, как я писал в исходном вопросе, я могу получить доступ к
ImageResource
из MyView.ui.xml следующим образом:<ui:with type="com.example.client.resource.ResourceBundle" field="myResource"/> <g:Image resource="{myResource.image}"/>
А также не возникает проблем с присвоением имен классов стилей из CssResource:<g:Label styleName="{style.className}" />
Проблема возникает при попытке установитьbackground-image
свойство в файлеmysstyle.css
с использованием нотации @sprite.4. Вам необходимо получить доступ к CSS-источнику через ссылку шаблона UiBinder на ClientBundle — это не сработает, если вы загрузите CSS-файл с помощью
<ui:style>
. Поэтому вместо<g:Label styleName="{style.className}"/>
вы будете использовать<g:Label styleName="{myResource.myCssResource.image}"/>
.5. Просто хочу отметить, что в
@sprite
это работает нормально, так как UiBinder просто генерирует неявное<ui:style>
иClientBundle
из него………..CssResource
Способ добавитьImageResource
к этому неявномуClientBundle
(*_GenBundle
в сообщении об ошибке) — использовать<ui:image>
вui.xml
. Также можно<ui:data>
сгенерироватьDataResource
.