0

我有一个 ClientBundle,我在其中引用了一堆图标作为 ImageResource 的

public interface DefaultCMSResources extends ClientBundle {

    String baseImgLoc = "com/jorsek/ui/client/style/images/base/";
    String baseIconLoc = "com/jorsek/ui/client/style/images/icons/";
    String fugeIconsLoc = baseIconLoc+"fugue/";



    /* Icons */

    @Source(fugeIconsLoc+"book-open.png")
    ImageResource getBookIcon();

}

出于多种原因,我真的不喜欢通过 @Source 注释引用静态文件位置。

我真的很想创建一个像@FugueIcon 这样的自定义注释,它会在某处动态生成静态路径。IE:

public interface DefaultCMSResources extends ClientBundle {


    /* Icons */

    @FugueIcon("book-open")
    ImageResource getBookIcon();

}

我正在查看 @Source 注释的代码,但没有弹出任何内容。我希望有人可以提供我可能采取的步骤来实现这一点。

谢谢!

4

1 回答 1

0

这样做的问题是,如果文件是动态选择的,编译器不会提前知道图像是什么——它不会知道大小,所以它不能为它编写正确的 css(如果@sprite在您的 CssResource)或为各种ImageResource方法提供结果。@Source注释意味着编译器可以在应用程序转换为 JS 之前知道它需要的关于图像的所有信息,因此它可以在该 JS 中写入关于它将拥有的图像的详细信息。

相反,您可能想寻找ImageResource一种直接实现该方法的方法 - 一个选项是实例化一个com.google.gwt.resources.client.impl.ImageResourcePrototype实例,该实例实现该接口,并允许您指定有关所需图像的详细信息 - 名称(主要是可选的) url可以在该网址中找到它,以及该网址中的位置(如果您正在制作精灵)以及要使用的大小。

于 2013-07-12T18:12:53.227 回答