JGoodies绑定,没有丢失焦点的提交,也没有对键入的每个字符进行提交



在JGoodies Bindings API(链接到API)中,有一个commitOnFocusLost参数:

commitOnFocusLost-true用于在焦点丢失时提交文本更改,false在键入的每个字符上提交文本更改

我想要这样的行为,即没有焦点上的提交丢失,并且在键入字符时没有提交。我只想在调用Bindings.commitImmediatly()时有一个提交。我能做到吗?

我不是100%确定,但是的,你可以做到。

您需要使用BasicComponentFactory来创建组件并使用BasicComponentFactory.createTextField(ValueModel),去掉bool参数。

然后,你需要弄清楚如何以及何时在你的价值模型上调用保险箱,以便相应地保存。

您可能正在寻找BufferedValueModel:

一种ValueModel,它封装另一个ValueModel,即主体,并延迟主体值的更改。返回主题的值,直到设置了值为止。在触发通道变为Boolean.TRUE.之前,缓冲值不会写入主题

PresentationModel.getBufferedValue()对创建它们很有用。


然而,通常我会避免缓冲模型,因为它会给已经相当复杂的体系结构模型增加额外的复杂性。此外,它不能很好地与模型验证配合使用。我建议不要理会绑定的自动提交行为,而是围绕它构建代码

Karsten Lentzsch关于缓冲:

我个人更喜欢通过复制域对象图来缓冲。在许多应用程序中,客户端上的域对象是后端域对象的副本。在这种情况下,您可以操作在客户端域对象上,而不需要任何进一步的缓冲。刷新对客户端域对象所做的所有更改你可以从后端重新加载它们。

无论如何,如果您希望在Presentation Model(PM)层使用缓冲区,你应该在PM中提供它。你的演示逻辑然后对缓冲状态而不是域状态进行操作。

您可以在绑定教程中找到一个示例。请参阅BufferedAlbumPresentationModel。它展示了如何监听缓冲的"classic"属性的变化以更新缓冲的"composerEnabled"属性。请注意,BufferedClassicalChangeHandler复制在Album#setClassical中实现的行为如果专辑不是古典的,则作曲家为null。

您可以在JGoodies下载档案中的旧包中找到教程。

相关内容

  • 没有找到相关文章

最新更新