2011-04-08 42 views
1

是否有可能重新使用上UiBinder的 例如定義窗口小部件:UiBinder的小工具

<g:SuggestBox ui:field='searchBox' /> 

我的意思是使用兩個不同的地方相同SuggestBox。 如果有可能,我該怎麼做電話或什麼?

感謝您的幫助。

+0

您不能在DOM中的兩個位置同時附加相同的窗口小部件*實例*(因爲每個實例只有一個父字段)。你真的想要同一個實例嗎?如果是,爲什麼? (你當然可以有多個「相同」SuggestBox實例,或者UiBinder小部件的多個實例 - 這不就足夠了嗎?) – 2011-04-08 08:58:35

回答

5

你能做到這一點,這裏有一個例子:

定義要重用部件:

ExampleLabel.java:

package com.example.client; 

import import com.google.gwt.user.client.ui.Label; 

public class ExampleLabel extends Composite { 
    interface ExampleLabelBinder extends UiBinder<Widget, ExampleLabel>{} 
    private static ExampleLabelBinder binder=GWT.create(ExampleLabelBinder.class); 
    public ExampleLabel() { 
     initWidget(binder.createAndBindUi(this); 
    } 
} 

ExampleLabel.ui.xml

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
    xmlns:g='urn:import:com.google.gwt.user.client.ui'> 
    <g:Label>Just some text</g:Label> 
</ui:UiBinder> 

要使用它,你可以這樣做:

UseExampleLabel.ui.xml:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
    xmlns:g='urn:import:com.google.gwt.user.client.ui' 
    xmlns:myWidgets='urn:import:com.example.client> 
<g:FlowPanel> 
    <myWidgets:ExampleLabel></myWidgets:ExampleLabel> 
    <myWidgets:ExampleLabel></myWidgets:ExampleLabel> 
    <myWidgets:ExampleLabel></myWidgets:ExampleLabel> 
</g:FlowPanel> 
</ui:UiBinder> 

第三行指向包你的小部件是要重複使用。

+0

是的,這就是你這樣做的方式。簡而言之,創建您自己的具有所需功能的SuggestBox的實現,然後使用前綴(myWidgets)將其導入到UiBinder的XML名稱空間中,然後將其用作其他任何GWT窗口小部件。 – janhink 2011-04-08 09:09:28

+1

這意味着,這是不可能做到這一點: 那是什麼意思;將小部件與其所有偵聽器一起使用... – Issam 2011-04-08 09:14:06

+1

您無法兩次添加同一個實例,但可以在ExampleLabel.java中添加處理程序,然後在添加小部件時,每個實例都將有處理程序 – 2011-04-08 09:19:17