最近我一直在开发一些功能,在我看来,它可以用某种形式的双向绑定很好地建模。
示例:有一个屏幕,用户可以在其中填写一些表格并保存一些内容。稍后用户可以返回该内容并对其进行编辑。内容存储在数据库中,因此应该异步获取内容。我使用 RxJava 和 Mosby MVP 在片段和演示者之间创建 MVVM 样式的连接。
问题是表单应该在运行中进行验证,所以任何时候视图更改的某些部分都应该通知演示者。但是当来自 DB 的异步内容到达时(如果用户正在编辑现有内容),由于状态之间的转换,视图可能会破坏来自 DB 的“初始”状态。在视图和演示者之间也存在无限事件传递循环的风险(distinctUnitChanged()
并不总是对此有所帮助,因为状态可以像 1-2-1-2-1 一样改变)
我找到了 2 种解决方法,但我对它们不满意,因为它们相当不纯,而且不像惯用的 FRP。
第一个是更改视图,使其在收到演示者的第一个状态之前不发送事件。
第二个需要牺牲 Presenter 的纯度。呈现是设置一个标志,告诉我们是否应该接受视图的状态更改。它将跳过视图中的事件,直到它接收到它传递给视图的事件(初始状态)。
事情变得更加困难,因为在 Android 视图中可以随时断开并重新连接到 Presenter(无论是否保存状态),并且 Presenter 应该是事实的来源。
如果有人有任何使用 RxJava 实现双向绑定的示例或任何想法,我将不胜感激。