Прикрепление источника изображения из внешнего CSS-файла с помощью @sprite

#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-файлов, как показано в разделе Фоновые изображения / спрайты CssResourceCookBook

2. Можете ли вы опубликовать содержимое 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 .