我已经定义了一个ClientBundle,一个Style接口,并通过@source注释将其与我的CSS文件连接起来。

我有两个问题:


当我在uibinder文件中使用<ui:with>时,出现以下异常:Deferred binding result type MyStyle should not be abstract.有人可以解释发生了什么吗?以及如何在uibinder文件中正确包含样式?
我想在许多uibinder中共享资源,而不必每次都付出初始化样式的代价。 Gwt贫乏的开发指南建议使用UiField(provided=true)@uiFactory。尽管我已经成功使用@uiFactory来使用自己的自定义小部件。我不知道如何使用@uiFactory将样式注入uiBinder。


例如:

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

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


我怎样才能得到这项工作?

提前致谢。

最佳答案

我在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}" />

10-04 16:51