使用GWT ClickHandler进行MVP设计

时间:2012-06-14 20:22:12

标签: gwt mvp

使用GWT的ClickHandler的MVP方法是什么?

我的视图中有一个按钮,我想在其中添加一个点击处理程序。

查看 button.addClickHandler(?)

传递了什么?主持人?新推的点击处理程序?

示例案例1.查看代码:

this.myButton.addClickHandler(new ClickHandler()
    {
        @Override
        public void onClick(ClickEvent event)
        {
            myPresenter.buttonClicked();
        }
    });

在这种情况下,无法测试向按钮添加点击处理程序......

示例案例2.演示者代码:

this.view.addClickHandlerToButton(this);

    @Override
    public void onClick(ClickEvent event)
    {
        buttonClicked();
    }

在这种情况下,会在演示者中引入GWT代码(ClickEvent),应该避免使用。

2 个答案:

答案 0 :(得分:2)

我用这种方式解决了这个问题:

将视图注册到clickevent, 并在视图中处理它:

的onClick(){ presenter.onButtonClicked(); }

可能按钮有一些语义,如“deleteEntry”,因此演示者方法将是“onDeleteEntryClicked”或“deleteEntry”

mvp说让视图决定使用哪种ui元素,并且演示者执行命令。 所以“deleteEntry”背后的逻辑不会改变,你可以用其他ui元素替换按钮 - 也可以没有hasClickHandler。

答案 1 :(得分:-1)

该按钮实现了一个名为HasClickHandlers的接口,该接口有一个注册点击事件的方法。

在View界面中,您可以将此界面返回给演示者,演示者可以在其上调用addClickHandler。

查看界面:

public MyView extends IsWidget{
    public HasClickHandlers getButton();

}

您的观看实施:

public HasClickHandler getButton(){
    return button;
}

在演示者中:

view.getButton().addClickHandler(new ClickHandler(){
....
});