GXT UiBinder FieldLabel

use*_*970 1 gwt gxt uibinder

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

我发现这篇文章:GXT:UiBinder Widget的新实例

开发人员使用这些标记的地方

<form:FieldLabel text="Text">
  <form:Widget>
    <form:TextField ui:field="text"/>
  </form:Widget>
</form:FieldLabel>
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

我的GXT版本(3.0.1)似乎不允许FieldLabel标记的非文本子项.

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

@UiField(provided = true)
Run Code Online (Sandbox Code Playgroud)

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

Col*_*rth 5

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

<form:FieldLabel text="Text">
  <form:widget>
    <form:TextField ui:field="text"/>
  </form:widget>
</form:FieldLabel>
Run Code Online (Sandbox Code Playgroud)

在UiBinder中,带有大写字母的元素表示真实的Widget子类,而小写元素是常规的html dom元素,或者是父窗口小部件标记的一些修饰符.我们可以看到,由于命名空间,这不是 dom元素form:,与父窗口小部件标记(即<form:FieldLabel>)相同.

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

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

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