2014-01-30 100 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的内部类。

相关问题