2013-04-16 43 views
1

我是UiBinder的新手,我嘗試使用FieldLabel。GXT 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的更好的辦法?

回答

5

的問題是,你不應該利用form:widget

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

在UiBinder的,以大寫字母元素代表一個真實的Widget的子類,而小寫的元素是一個普通的HTML DOM元素,或者一些修改爲父窗口小部件標記。由於form:命名空間,我們可以看到這是而不是 dom元素,與父窗口小部件標記(即<form:FieldLabel>)相同。

這是如何工作的:FieldLabel類有一個Java方法來給它顯示小部件 - setWidget。這種方法是飾有@UiChild註釋(在其超):

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

這使您的用戶UiBinder的,是指一個標籤作爲widget,並與你輸入任何內容,調用該方法。

+0

非常明確的解釋,謝謝:) – user2147970