外部ClientBundle中的ImageResource的@url,用于UiBinder

时间:2014-03-05 23:01:05

标签: gwt uibinder

ImageResource@url 不在同一个包中时,是否可以在UiBinder中引用ImageResource UiBinder

例如:

我的分享ClientBundle

package com.myproject.client.resources;

class SharedResources extends ClientBundle {
    ImageResource myImage();
}

并且,com.myproject.client包中的UiBinder文件。 anotherpackage

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
    <ui:with field="res" type="com.myproject.client.resources.SharedResources"/>
    <ui:style>
        @url myImg {insert reference to res.myImage}

        .theClass {
            background: myImg no-repeat center center #d7d6d6;
            width: 21px;
        }
    </ui:style>
    <g:HTMLPanel styleName="{style.theClass}"/>
</ui:UiBinder>

我知道我可以将CSS移动到com.myproject.client.resources然后我可以轻松访问myImage(因为CSS和myImage将在同一个包中),但我我希望将UiBinder中的CSS 保留在内,并重用UiBinder中的共享myImage

这里有关于这个问题的讨论,但它没有回答我的问题: https://groups.google.com/forum/#!topic/google-web-toolkit/ExOJAEfQmkY

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我的解决方案是使用ui:image。此解决方案不会重复使用并直接引用ClientBundle,就像我认为您想要的那样,但它可以让您不移动CSS,或将图像复制到文件夹,或创建新的ClientBundle。

代码如下:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
    <ui:with field="res" type="com.myproject.client.resources.SharedResources"/>
    <ui:image field="resImage" src="../resources/image.png" />
    <ui:style>
        @url myImg resImage

        .theClass {
            background: myImg no-repeat center center #d7d6d6;
            width: 21px;
        }
    </ui:style>
    <g:HTMLPanel styleName="{style.theClass}"/>
</ui:UiBinder>

我保留SharedResources参考仅用于说明您的示例,但在这种情况下不会使用它。