我希望我的uiBinder使用ClientBundle,它将提供一些运行时自定义标签。一种TextResource,但不是来自文本文件!
我尝试使用GwtCreateResource,但是从DevGuide看起来似乎不可能。我对吗 ? (create()和name()是唯一可用的方法)
我想要实现的是这样的:
客户端包:
public interface MyWidgetResources extends ClientBundle {
GwtCreateResource<WidgetLabels> labels();
@Source("lol.css")
CssResource style();
}
标签类:
public final class MyWidgetLabels {
public String title() {
return load("mywidget-title");
}
public String banner() {
return load("mywidget-banner");
}
private String load(String key) {
// load from external..
}
}
UiBinder的:
<ui:with type="com.package.MyWidgetResources" field="res"/>
<gwt:SimplePanel>
<gwt:Label text="{res.labels.title}"></gwt:Label>
<gwt:Label text="{res.labels.banner}"></gwt:Label>
</gwt:SimplePanel>
我的代码已经是这样但res.label.title
不起作用,因为GwtCreateResource只能作为类实例化器(res.labels.create().title()
)。
我有解决方案吗?也许使用自定义ResourceGenerator?
答案 0 :(得分:0)
只要GWT.create可以创建MyWidgetLabels
,您就可以将任何想要的内容添加到该类型中,并且可以使其按照您的喜好行事。您将需要在帖子末尾建议的uibinder中使用create
引用来实际构建对象,因此您的行将看起来像这样:
<gwt:Label text="{res.labels.create.title}"></gwt:Label>
每个.
分隔的部分(第一部分除外,它是一个ui:field / @UiField)是一个无法调用的方法 - 你在labels()
中声明了MyWidgetResources
, create()
中已存在GwtCreateResource
,您在自己的title()
类型中创建了MyWidgetLabels
。
由于第一部分是ui:field / @ UiField,你可以让另一部分像res.labels.create
那样引用labels
,以便稍后你可以说:
<gwt:Label text="{labels.title}"></gwt:Label>
最后,是的,您可以构建自己的ResourceGenerator,只要您扩展ResourcePrototype
类型并使用getName()
方法,就可以让您执行任何想要发出相关类型的内容