GWT编辑器用于只读和编辑模式

时间:2012-06-25 16:57:21

标签: gwt requestfactory gwt-editors

GWT的编辑器框架非常方便,它不仅可以用于编辑 POJO ,还可以用于只读显示。

但是,我不完全确定执行内联编辑的最佳做法是什么。

我们假设我有一个PersonProxy并且我有一个Presenter-View对用于显示和编辑PersonProxy。默认情况下,此演示者视图应以只读模式显示PersonProxy,如果用户按下编辑按钮,则应允许用户编辑PersonProxy对象。

我想出的解决方案是创建两个编辑器(PersonEditEditorPersonDisplayEditor),这两个编辑器都通过UiBinder添加到ViewPersonEditEditor包含。{1}} ValueBoxEditorDecoratorPersonDisplayEditor包含正常Labels 最初,我显示PersonDisplayEditor并隐藏PersonEditEditor

View我为每个编辑器创建两个RequestFactoryEditorDriver,并通过Presenter界面从View访问它。我还在setState()接口中定义了View方法。

首次显示Presenter时,我呼叫PersonDisplayDriver.display()setState(DISPLAYING)

当用户点击修改按钮时,我会从PersonEditDriver.edit()拨打setState(EDITING)PresentersetState(EDITING)会隐藏PersonDisplayEditor并使PersonEditEditor可见。

我不确定这是否是最佳方法。如果不是推荐的内联编辑方法是什么?在编辑器上进行单元测试的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

是的,Presenter-View对应该是。但是如果您愿意,可以采用以下两种方法来实现此功能:

1)将编辑/查看代码设计集成在 ui.xml ieEdit代码中 EDitHorizo​​natlPanel ,并在 ViewHorizo​​ntalPanel 中查看代码。有不同的身份。通过使用id,显示/隐藏面板和显示方法。如果getView().setState() ==Displaying然后显示 ViewHorizo​​ntalPanel ,如果getView().setState()==Editing则显示 EditHorizo​​ntalPanel

2)不使用标签,而只使用文本框。 set在视图模式下需要时,启用属性为false,否则为true

您已经创建了两个Presenter / view但我认为如果Edit / View函数具有相似的代码,那么不需要为了查看目的而反复重写类似的代码。

如果一个大项目有如此多的编辑/查看功能,你将创建这种类型的多个View / Presenter,而不是你的项目规模变得如此庞大。

我认为无论我提出什么建议可能都不是好方法,但应该找出哪种方法可以避免代码复制。

答案 1 :(得分:2)

如果您能负担得起开发2个不同的视图,那么请使用它,它为您提供最大的灵活性。

我们在我们的应用程序中所做的,我们负担不起开发和维护两个视图的成本,是将这两个州烘焙到我们的编辑中,例如一个自定义组件,可以是标签或文本框(在大多数情况下,我们只是将文本框设置为只读,并应用一些样式来隐藏框边框)。
要检测我们所处的模式,因为我们使用RequestFactoryEditorDriver(就像您一样),我们的编辑器会实现HasRequestContext:这里接收null值意味着驱动程序的display()使用了方法,所以我们处于只读模式。另一种方法是使用EditorVisitor和一些HasReadOnly界面(BTW正是RequestFactoryEditorDriverRequestContext向下传递给HasRequestContext编辑器所做的事情)