2014-01-30 135 views
2

我有火災ValidEvent(GXT自定義事件)的對話:在一個UiBinder文件中聲明2個獨立組件?

public class MyDialog extends Dialog implements HasValidHandlers { 

    ... 
} 

所以,如果我將其包含在UiBinder文件,我應該可以做這樣的事情(見@UiHandler):

@UiField 
MyDialog myDialog; 

@UiHandler("myDialog") 
void onValid(ValidEvent event) { 
    .. 
} 

而且我想在一個小部件也與UiBinder定義MyDialog

public class MyWidget extends Composite { 

    @UiField 
    MyDialog myDialog; 

    public MyWidget(Binder binder) { 
    initWidget(binder.createAndBindUi(this)); 
    } 

    @UiHandler("myDialog") 
    void onValid(ValidEvent event) { 
    .. 
    } 

    interface Binder extends UiBinder<Widget, MyWidget> {} 

} 

問題:將組件放在ui.xml文件中的位置?

包括將導致作爲UiBinder的將嘗試添加對話框中的窗口小部件圖形問題的組件的對話框:

<g:HTMLPanel> 
    <MyDialog ui:field="myDialog"/> 
</g:HTMLPanel> 

:在uIBinder,我只能有一個根組件。

問題:如何在單個UiBinder文件中聲明2個不同的組件?我想避免使ui.xml只是爲了聲明對話框,如果我通過new實例化它,則@UiHandler將不起作用。

回答

0

你部分回答了你自己的問題。

包括將導致作爲UiBinder的將嘗試添加對話框中的窗口小部件圖形問題的組件的對話框:

因此,你需要單獨創建一個ui-binder的組成部分,因爲你還打算使用它作爲uiField等!

根據我的猜測(根據我的知識),每個ui-binder創建一個小部件,並且可以根據需要在另一個ui-binder或文件中引用它。

0

您可以two UiBinder in the same widget

public class MyWidget extends Composite { 

    MyDialog myDialog; 

    public MyWidget(Binder binder) { 
    initWidget(binder.createAndBindUi(this)); 
    DialogBinder dialogBinder = GWT.create(DialogBinder.class); 
    myDialog = dialogBinder.createAndBindUi(this); 
    } 

    @UiHandler("myDialog") 
    void onValid(ValidEvent event) { 
    .. 
    } 

    interface Binder extends UiBinder<Widget, MyWidget> {} 

    @UiTemplate("DialogBinder.ui.xml") 
    interface DialogBinder extends UiBinder<MyDialog, MyWidget> {} 

} 

而且你DialogBinder.ui.xml樣子:

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"> 
    <MyDialog ui:field="myDialog"/> 
</ui:UiBinder> 

我沒有測試它,但可以有不同的@UiField問題。 你可以做這個這個擁有所有Dialog @UiField和@UiHander的內部類。

相關問題