2011-10-05 124 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