我有一个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注释的代码,没有任何内容突然出现在我面前。我希望有人可以提供我可能采取的步骤来实现这一目标。
谢谢!
答案 0 :(得分:0)
这个问题是,如果文件是动态选择的,编译器将不会提前知道图像是什么 - 它不会知道大小,因此无法为其编写正确的css(如果在CssResource中使用@sprite
或者为各种ImageResource
方法提供结果。 @Source
注释意味着编译器可以在应用程序变为JS之前知道它对图像的所有需求,因此它可以在JS中写入有关它将具有的图像的详细信息。
相反,您可能希望查看直接实现该ImageResource
方法的方法 - 一个选项是实例化实现该接口的com.google.gwt.resources.client.impl.ImageResourcePrototype
实例,并允许您指定有关该实例的详细信息。需要的图像 - 一个名称(主要是可选的),它可以找到它的URL,以及该URL中的位置(如果你是精灵)以及要使用的大小。