GWT的编辑器框架非常方便,它不仅可以用于编辑 POJO ,还可以用于只读显示。
但是,我不完全确定执行内联编辑的最佳做法是什么。
我们假设我有一个PersonProxy
并且我有一个Presenter-View
对用于显示和编辑PersonProxy
。默认情况下,此演示者视图应以只读模式显示PersonProxy
,如果用户按下编辑按钮,则应允许用户编辑PersonProxy
对象。
我想出的解决方案是创建两个编辑器(PersonEditEditor
和PersonDisplayEditor
),这两个编辑器都通过UiBinder
添加到View
。 PersonEditEditor
包含。{1}}
ValueBoxEditorDecorator
和PersonDisplayEditor
包含正常Labels
最初,我显示PersonDisplayEditor
并隐藏PersonEditEditor
。
在View
我为每个编辑器创建两个RequestFactoryEditorDriver
,并通过Presenter
界面从View
访问它。我还在setState()
接口中定义了View
方法。
首次显示Presenter
时,我呼叫PersonDisplayDriver.display()
和setState(DISPLAYING)
。
当用户点击修改按钮时,我会从PersonEditDriver.edit()
拨打setState(EDITING)
和Presenter
。
setState(EDITING)
会隐藏PersonDisplayEditor
并使PersonEditEditor
可见。
我不确定这是否是最佳方法。如果不是推荐的内联编辑方法是什么?在编辑器上进行单元测试的最佳方法是什么?
答案 0 :(得分:2)
是的,Presenter-View对应该是。但是如果您愿意,可以采用以下两种方法来实现此功能:
1)将编辑/查看代码设计集成在 ui.xml ieEdit代码中 EDitHorizonatlPanel ,并在 ViewHorizontalPanel 中查看代码。有不同的身份。通过使用id,显示/隐藏面板和显示方法。如果getView().setState() ==Displaying
然后显示 ViewHorizontalPanel ,如果getView().setState()==Editing
则显示 EditHorizontalPanel 。
2)不使用标签,而只使用文本框。 set在视图模式下需要时,启用属性为false,否则为true
您已经创建了两个Presenter / view但我认为如果Edit / View函数具有相似的代码,那么不需要为了查看目的而反复重写类似的代码。
如果一个大项目有如此多的编辑/查看功能,你将创建这种类型的多个View / Presenter,而不是你的项目规模变得如此庞大。
我认为无论我提出什么建议可能都不是好方法,但应该找出哪种方法可以避免代码复制。
答案 1 :(得分:2)
如果您能负担得起开发2个不同的视图,那么请使用它,它为您提供最大的灵活性。
我们在我们的应用程序中所做的,我们负担不起开发和维护两个视图的成本,是将这两个州烘焙到我们的编辑中,例如一个自定义组件,可以是标签或文本框(在大多数情况下,我们只是将文本框设置为只读,并应用一些样式来隐藏框边框)。
要检测我们所处的模式,因为我们使用RequestFactoryEditorDriver
(就像您一样),我们的编辑器会实现HasRequestContext
:这里接收null
值意味着驱动程序的display()
使用了方法,所以我们处于只读模式。另一种方法是使用EditorVisitor
和一些HasReadOnly
界面(BTW正是RequestFactoryEditorDriver
将RequestContext
向下传递给HasRequestContext
编辑器所做的事情)