【问题标题】:GXT UiBinder FieldLabelGXT UiBinder 字段标签
【发布时间】:2013-04-16 14:28:25
【问题描述】:

我是 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 一起使用?

【问题讨论】:

    标签: gwt gxt uibinder


    【解决方案1】:

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

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

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

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

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

    这使您,UiBinder 用户,可以将标签称为widget,并使用您输入的任何内容调用该方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2012-10-22
      相关资源
      最近更新 更多