Присоединение ImageResource из внешнего файла CSS с помощью @sprite

Я пытаюсь использовать CssResource и ImageResource вместе в проекте GWT2.2.

CssResource и обфускация работают правильно, но у меня проблемы с доступом к изображениям.

Я уже могу получить доступ к изображениям через ImageResource непосредственно из файлов ui.xml следующим образом:

<ui:with type="com.example.client.resource.ResourceBundle" field="myResource"/>
<g:Image resource="{myResource.image}"/>

Но я не могу подключить ImageResource из внешних файлов .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

person Andres    schedule 05.04.2011    source источник
comment
Вы ссылаетесь на mystyle.css откуда-либо, кроме вашего ClientBundle? У вас есть ссылка <ui:style> в MyView.ui.xml?   -  person Jason Terk    schedule 05.04.2011
comment
Да, я ссылаюсь на mystyle.css как из ClientBundle, так и из UiBinder. У меня есть следующая ссылка: <ui:style src="../resource/css/mystyle.css" /> Нужно ли мне также ссылаться на нее из других мест?   -  person Andres    schedule 05.04.2011


Ответы (1)


Вы можете получить доступ к своим стилям из шаблонов UiBinder следующим образом:

<ui:with type="com.example.client.resource.ResourceBundle" field="myResource"/>

<g:FlowPanel styleName="{myResource.myCssResource.className}"/>
person Jason Terk    schedule 05.04.2011
comment
Да, я уже получаю доступ к ImageResource из моего UiBinder так же, как вы показываете здесь. Но сейчас я не могу получить доступ к ImageResource из внешних файлов .css, как показано в CssResourceCookBook раздел Фоновые изображения/спрайты - person Andres; 05.04.2011
comment
Можете ли вы опубликовать содержимое MyView.ui.xml в своем вопросе? Я покажу вам, как это исправить. - person Jason Terk; 05.04.2011
comment
Ну, как я писал в исходном вопросе, я могу получить доступ к 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. - person Andres; 05.04.2011
comment
Вам необходимо получить доступ к CssResource через ссылку шаблона UiBinder на ClientBundle — это не сработает, если вы загрузите файл CSS с помощью <ui:style>. Поэтому вместо <g:Label styleName="{style.className}"/> вы будете использовать <g:Label styleName="{myResource.myCssResource.image}"/>. - person Jason Terk; 05.04.2011
comment
Здорово! У меня сейчас работает. Большое спасибо @Jason! Просто деталь; в вашем последнем комментарии должно быть сказано <g:Label styleName="{myResource.myCssResource.className}"/> - person Andres; 05.04.2011
comment
Просто заметка, чтобы сказать, что @sprite работает нормально в <ui:style>, так как UiBinder просто генерирует из него неявные ClientBundle и CssResource. Чтобы добавить ImageResource к этому неявному ClientBundle (*_GenBundle в сообщении об ошибке), нужно использовать <ui:image> в ui.xml. Также есть <ui:data> для создания файла DataResource. - person Thomas Broyer; 07.04.2011
comment
Спасибо @Томас. На самом деле, если я правильно понял, ui:image не использует ImageResource, вам нужно указать относительный путь к имени изображения, вы не можете ссылаться на сам ресурс. Это отстой, потому что мешает рефакторингу, абстрагированию путей и т. д. См. code.google.com/p/google-web-toolkit/issues/detail?id=5320 ошибка, связанная с проблемой. Если я что-то упустил про ui:image, буду рад, если меня поправят! ^_^' - person PhiLho; 03.02.2012