2013-07-12 31 views
0

我有一個ClientBundle中,我引用了一堆圖標作爲ImageResource的GWT:我想創建一個自定義的註釋,以取代@Source

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

這樣做的問題是,如果文件是動態選擇的,編譯器將不會提前知道圖像是什麼 - 它不會知道大小,所以它不能爲它編寫適當的CSS (如果在CssResource中使用@sprite)或爲各種ImageResource方法提供結果。 @Source註解意味着編譯器可以在應用程序轉換爲JS之前知道圖像所需的全部內容,因此它可以在該JS中編寫關於它所具有的圖像的詳細信息。

相反,您可能想要直接實現該方法來實現該方法 - 一種選擇是實例化實現該接口的com.google.gwt.resources.client.impl.ImageResourcePrototype實例,並讓您指定所需圖像的詳細信息 - 名稱(大多數情況下是可選的)可以找到的URL,以及該URL中的位置(如果你是精靈)以及要使用的大小。

+0

那麼它不會被動態選擇。它會和@Source做同樣的事情,只是從不同的相對路徑中解析它。這會改變什麼嗎? –

相關問題