跳转到内容

WebObjects/Web 应用程序/开发/WOForm 最佳实践

来自维基教科书,开放世界中的开放书籍

将 EO 附加到表单

[编辑 | 编辑源代码]

Pierre Bernard

[编辑 | 编辑源代码]

我确实创建了 EO 并将其插入到专门用于创建和最终保存该 EO 的编辑上下文中。该编辑上下文与默认编辑上下文是同级关系。实际上,我所有的编辑都发生在专门的同级上下文中。会话默认值仅用于读取。这消除了待处理更改挂起带来的风险。

这样做,我在初始表单中的 awakeFromInsertion() 中获得了设置的默认值。

但是,我没有将 EO 直接绑定到表单。我将 EO 转换为字符串字典。使用键值编码,我首先提取想要在表单中使用的值集。然后,再次使用键值编码以及格式化程序,我为每个值推导出字符串表示形式。该表单绑定到该值字典的 _克隆_。

表单提交后,我会将修改后的克隆与原始字典进行比较。我只针对已更改的值执行从字符串到对象或 EO 值的逆向转换。这是通过首先使用格式化程序解析字符串,然后可能调用提取规范来完成的。

这具有以下优势

  • 我可以将一对一关系映射到普通表单
  • 我只设置了实际修改的 EO 值
  • 我不会丢失内部精度高于表单显示精度的值的精度
  • 我在代码中处理解析异常。一方面,这允许将无法解析的值保留在表单中

Ondra Cada

[编辑 | 编辑源代码]

取决于应用程序。

但最常见的是,我会先创建 EO,但只有在设置妥当后才会将其保存到 EC。这样,它可以直接连接,并且如果用户放弃它,它会在 GC 决定时消失 :)

Geoff Hopson

[编辑 | 编辑源代码]

我发现拥有一个 formValues NSMutableDictionary 并使其键名与我的 EO 属性名相同更加清晰。在我的 WOD 文件中,我可以将文本字段值等绑定到 'formValues.myAttribute。它还允许我预设一些默认值,隐藏我可能需要的任何隐藏字段,等等。然后,一旦我对收集到的数据感到满意,就可以轻松地将字典强加到插入的 EO 中。

Mike Schrag

[编辑 | 编辑源代码]

你们大多数人是在预先创建 EO 并将表单字段直接附加到 EO 的属性上,还是将字段克隆到 WOComponent 中并附加到这些字段上,然后在“保存”操作中将它们移动到新的 EO 中?第一种方法的问题是,如果有人导航离开,您将有一个空 EO 插入 EC,用户不会意识到它仍然存在于他们的会话中,但它显然更好,因为您可以直接连接到 EO 属性,并且不必保持 Component 和 EO 字段同步

Jean-François Veillette

[编辑 | 编辑源代码]

我使用一个新的 EO,它位于用于插入/编辑的“同级”编辑上下文中。这样,如果对 eo 进行了更改但没有保存,并且用户更改了页面,甚至使用了浏览器后退按钮,我都不关心,他不会搞乱“主”编辑上下文。

我忘记提我在某些特殊情况下使用的另一个选项:不绑定到 EO,而是绑定到 NSMutableDictionary,然后在准备好保存时,您可以创建 eo 并将字典值应用于它(有一个方法可以做到这一点)。

华夏公益教科书