2011-10-05 123 views
3

我已經定義了一個ClientBundle,一個Style界面,並通過@source註釋將其與我的css文件聯繫起來。gwt css uibinder共享資源

我有兩個問題:

  1. 當我在UiBinder的文件我得到下面的異常使用<ui:with>Deferred binding result type MyStyle should not be abstract.有人能解釋這是怎麼回事?我怎樣才能正確地在我的uibinder文件中包含樣式?

  2. 我想跨多個uibinder共享資源,而無需每次都支付初始化樣式的懲罰。 Gwt的貧血發展指南,建議使用UiField(provided=true)或使用@uiFactory。儘管我已成功使用@uiFactory來使用我自己的自定義小部件。我不知道如何使用@uiFactory將樣式注入到uiBinder中。

例如:

//in pojo 
@UiFactory 
public MyStyle getMyStyle() { 
    return myStyle; 
} 

//in uibinder 
<g:Label addStyleNames="{myStyle.defaultLable}"/> 

我怎樣才能得到這個工作?

在此先感謝。

回答

7

我用下面的建設中的UiBinder的文件:

<ui:with field='res' type="com.example.client.resources.MyResource" /> 

哪裏MyResource是包含CSS資源的接口:

public interface MyResource extends ClientBundle { 
    @Source("mycss.css") 
    MyCssResource css(); 
} 

MyCssResource是:

public interface MyCssResource extends CssResource { 
    String someStyle(); 
} 

在uibinder文件使用如下:

<g:TextBox addStyleNames="{res.css.someStyle}" /> 
+0

謝謝......你的解釋幫助我通過了我的第一個問題。你知道我怎麼能在多個uibinder文件中共享相同的資源嗎?我想創建一次我的包。再次感謝! – hba

+0

不用擔心,因爲GWT編譯器會內聯它,所以每個uibinder中的資源初始化在生成的JavaScript中都不是問題。在您的代碼中,您可以使用在所有類上共享的靜態實例。確保你在你的啓動代碼中調用'ensureInjected',所以uibinder文件中的資源實際上被注入了。 –

+0

我明白了,非常感謝您......您在gwt'文檔'中瞭解到:(http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html#Share_resource_instances)。他們描述瞭如何使用@uiFactory註解來解決ui:with子句。你是否能夠得到這個工作? – hba