3

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

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

假设我有一个PersonProxy,我有一Presenter-View对用于显示和编辑PersonProxy. 默认情况下,此 Presenter-View 应该以PersonProxy只读模式显示,如果用户按下编辑按钮,它应该允许用户编辑PersonProxy对象。

我想出的解决方案是创建两个编辑器(PersonEditEditorPersonDisplayEditor),它们都通过添加UiBinderView. PersonEditEditorcontains ValueBoxEditorDecorators 和contains PersonDisplayEditornormal Labels
最初我显示PersonDisplayEditor和隐藏PersonEditEditor

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

Presenter我第一次调用时显示PersonDisplayDriver.display()setState(DISPLAYING)

当用户单击编辑按钮时,我会调用PersonEditDriver.edit()setState(EDITING)从我的Presenter.
setState(EDITING)将隐藏PersonDisplayEditor并使其PersonEditEditor可见。

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

4

2 回答 2

2

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

1) 在一个ui.xml中集成Edit/View 代码设计,即EditHorizo ​​natlPanel 中的Edit 代码和ViewHorizo ​​ntalPanel中的View 代码。面板具有不同的id。通过使用 id,使用显示方法显示/隐藏面板。如果然后显示ViewHorizo​​ntalPanel,如果然后显示EditHorizo​​ntalPanelgetView().setState() ==DisplayinggetView().setState()==Editing

2) 不使用标签,只使用文本框。当您在查看模式下需要它时,设置 Enable 属性为 false,否则为 true

您已经创建了两个演示者/视图,但我认为如果编辑/视图功能具有相似的代码,则无需为了视图目的一次又一次地重写相似的代码。

如果一个大项目有这么多的编辑/查看功能,并且您将创建这种类型的多个视图/演示者,那么您的项目规模就变得如此庞大,这是不必要的。

我认为无论我提出什么建议,这可能都不是好方法,但应该找出有助于避免代码复制的方法。

于 2012-06-26T08:36:10.230 回答
2

如果你有能力开发 2 个不同的视图,那就去吧,它会给你最大的灵活性。

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

于 2012-06-26T09:45:07.033 回答