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