【问题标题】:How to expose table widget to presenter in MVP pattern with gwt如何使用 gwt 以 MVP 模式向演示者公开表格小部件
【发布时间】:2011-07-02 17:20:11
【问题描述】:

在 MVP 模式中,小部件(视图)以如下形式公开其小部件:

@Override    
public HasClickHandlers getAddIssueClickHandlers() {
            return addIssueButton;
        }

喜欢:

@Override
public HasText getTaskName() {
    return taskName; // taskName is a Label
}

允许演示者修改视图或从小部件获取值。但是,它不确定如何获取表格小部件,如 FlexTable 或 CellTable 以便演示者修改表格。任何想法都非常感谢。谢谢。

【问题讨论】:

    标签: gwt mvp


    【解决方案1】:

    并非所有 GWT 小部件都在设计时考虑到这些接口(即 HasclickHandlersHasTextIsWidget 等)。
    在最近的 GWT 版本中,基本小部件已更改,以便它们实现这些接口,以便使使用它们的视图在单元测试中可测试。所以我不确定 FlexTable 是否实现了这些接口,但对于 CellTable,您可以使用 HasData 接口。

    这里可以找到CellTable实现的接口:Javadoc

    我个人会通过 HasData 接口公开 CellTable,该接口可用于设置和检索 selectionModel(用于在 CellTable 中选择行)。
    为了修改或更新 CellTable 中显示的数据,我将使用 ListDataProvider 并将其存储在 Presenter 中。

    @Override    
    public HasData getCellTableDisplay() {
                return cellTable;
    }
    

    在presenter的构造函数中 您可以创建一个 ListDataProvider 并使用 addDataDisplay 函数添加 CellTable:

    final ListDataProvider<String> dataProvider = new ListDataProvider<String>();
    dataProvider.addDataDisplay(getView().getCellTableDisplay);
    

    【讨论】:

    • HasData 是未知类。我正在使用 GWT 2.1.1。
    • 根据Javadoc HasData接口应该是2.1的一部分:google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/…
    • 是的,这有点奇怪,我也已经检查了文档。我会尝试一些修复。
    • 我想知道您在演示者中使用 ListDataProvider 是否有任何问题。它使用调度程序使普通的 junit 测试失败。你做了什么来替代默认的调度器实现吗?
    • 这是一个非常好的问题(到目前为止还没有真正使用过 Junit 测试)。作为替代方案,您可以将 ListDataProvider 保留在视图中,并在视图界面中使用 setData() 之类的方法。但是据我所知,大多数遵循 mvp 方法的人将 ListDataProvider 保留在 Presenter 中。
    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2018-05-30
    • 2011-11-27
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多