GWT:我想创建一个自定义注释来替换@Source

时间:2013-07-12 17:39:36

标签: gwt annotations clientbundle

我有一个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注释的代码,没有任何内容突然出现在我面前。我希望有人可以提供我可能采取的步骤来实现这一目标。

谢谢!

1 个答案:

答案 0 :(得分:0)

这个问题是,如果文件是动态选择的,编译器将不会提前知道图像是什么 - 它不会知道大小,因此无法为其编写正确的css(如果在CssResource中使用@sprite或者为各种ImageResource方法提供结果。 @Source注释意味着编译器可以在应用程序变为JS之前知道它对图像的所有需求,因此它可以在JS中写入有关它将具有的图像的详细信息。

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