1

我是 UiBinder 的新手,我尝试使用 FieldLabel。

我发现了这篇文章:GXT: UiBinder new instance of a Widget

开发人员在哪里使用这些标记

<form:FieldLabel text="Text">
  <form:Widget>
    <form:TextField ui:field="text"/>
  </form:Widget>
</form:FieldLabel>

当我做同样的事情时,我收到以下错误:

ERROR: Illegal child <form:Widget> in a text-only context. Perhaps you are trying to use unescaped HTML where text is required, as in a HasText widget?: <form:FieldLabel text='Text'> (:7)

看来我的 GXT (3.0.1) 版本不允许 FieldLabel 标记有非纯文本子项。

到目前为止,我发现包含 FieldLabel 的唯一解决方案是使用

@UiField(provided = true)

有没有更好的方法将 FieldLabel 与 UiBinder 一起使用?

4

1 回答 1

5

问题是你不应该大写form:widget

<form:FieldLabel text="Text">
  <form:widget>
    <form:TextField ui:field="text"/>
  </form:widget>
</form:FieldLabel>

在 UiBinder 中,大写字母的元素代表一个真正的 Widget 子类,而小写的元素要么是常规的 html dom 元素,要么是父小部件标签的一些修饰符。我们可以看到这不是dom 元素,因为form:命名空间,与父部件标签(即<form:FieldLabel>)相同。

这是如何工作的:FieldLabel该类有一个 Java 方法来为其提供要显示的小部件 - setWidget。此方法用@UiChild注释装饰(在其超类中):

@Override
@UiChild(limit = 1, tagname = "widget")
public void setWidget(Widget w) {
  //...

这使您(UiBinder 用户)能够将标记引用为widget,并使用您输入的任何内容调用该方法。

于 2013-04-16T16:23:35.173 回答