2012-06-25 57 views
3

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

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

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

我想出了解决的办法是创建两个编辑器(PersonEditEditorPersonDisplayEditor),无论通过UiBinder加入ViewPersonEditEditor包含 ValueBoxEditorDecorator s和PersonDisplayEditor包含正常Labels
最初我显示PersonDisplayEditor并隐藏PersonEditEditor

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

当第一次显示Presenter时,我会拨打PersonDisplayDriver.display()setState(DISPLAYING)

当用户点击编辑按钮,我叫PersonEditDriver.edit()setState(EDITING)从我Presenter
setState(EDITING)将隐藏PersonDisplayEditor并使PersonEditEditor可见。

我不确定这是否是最好的方法。如果不是推荐的内嵌编辑方法是什么?对编辑进行单元测试的最佳方式是什么?

+0

如果我不理解问题错误,那么你想编辑/查看PersonProxy对象的功能。为什么要为一个对象创建两个Presenter-View?如果假设GUI除了小部件可见性以外还有相同的编辑/查看,那么你可以通过make方法实现,它将设置控制属性,如control.setEnabled(false);仅供查看(显示)。 – iMBMT

+0

我有两个单独的编辑器用于编辑/查看。一种是使用标签和其他文本框。 我想避免使用两个Presenter-View对,因为代码大部分是冗余的或者是多余的(用于显示它只是在只读驱动程序上调用display()并且为了编辑而调用edit())。 Presenter-View par更像是一个工作流程的东西。 –

+0

@Ümit我采用完全相同的方法... – koma

回答

2

如果你负担得起开发2个不同的意见,那么去吧,它给你最大的灵活性。

我们在我们的应用程序中做了什么,我们无法负担开发和维护两种视图的成本,因此我们将这两个州烧成了编辑,例如,一个可以是标签或文本框的自定义组件(在大多数情况下,我们只需将文本框设置为只读并应用一些样式来隐藏框边框)。
要检测我们所在的模式,因为我们使用RequestFactoryEditorDriver(与您一样),我们的编辑实现HasRequestContext:在此处接收到null值意味着使用了驱动程序的display()方法,因此我们处于只读模式。另一种方法是使用EditorVisitor以及一些HasReadOnly接口(BTW正是RequestFactoryEditorDriver所做的将RequestContext下移到HasRequestContext编辑器)。

+1

如何处理只有只读和可编辑字段混合的页面?即。你如何做一些编辑()一些部分和一个显示器()为其他?谢谢! – Damo

+0

我们有2个驱动程序,我们'编辑()'与一个''display()'与另一个。显然,屏幕必须分成2个编辑器,每个编辑器都由驱动程序控制。 –

+0

好的谢谢。不确定这种方法适用于我。我有一个编辑层,根据数据,一些子编辑应该是只读的。直到我完成编辑/显示并检查了setValue() – Damo

2

是的,Presenter-View对应该是。但在这里,如果你喜欢去用两种方式来实现此功能:

1)整合编辑/查看代码设计在一个ui.xml ieEdit代码EDitHorizo​​natlPanel和视图代码ViewHorizo​​ntalPanel .The面板有不同的ID。通过使用id,用显示方法显示/隐藏面板。如果getView().setState() ==Displaying则显示ViewHorizo​​ntalPanel并且如果getView().setState()==Editing则显示EditHorizo​​ntalPanel

2)不使用标签,只使用文本框。设置启用属性是虚假的,当你需要它在视图模式,否则为真

你已经创建了两个演示者/视图,但我认为如果编辑/视图功能有类似的代码,所以不需要重复类似的代码一遍又一遍地查看目的。

如果一个大项目有这么多的编辑/视图功能,并且您将创建这种类型的多视图/演示程序,而不是您的项目大小变得如此巨大的不必要。

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