【发布时间】:2018-04-08 15:22:25
【问题描述】:
我使用 RxSwift、Realm 和 RxRealm 实现的 MVVM 模式如下所示:
例如我有一个显示一些可编辑内容的文本字段。我希望它像这样实时保存/同步到数据库:
//View
textField.rx.text.subscribe(textViewModel.saveText.inputs)
viewModel.stringValue.drive(textField.rx.text)
//ViewModel:
lazy var saveText = Action<String,Void>{ newStringValue in
realm.write{
textObject.stringValue = newStringValue
}
//don't block the main thread
return Observable.just()
}
lazy var stringValue = Observable(from:textObject).map{$0.stringValue}.asDriver(onErrorJustReturn : "no string")
在 TextField 中缓慢键入时,一切都会相应地工作。当快速打字时,字母会像这样被“吞下”:
- 类型“A”
- 将“A”写入数据库
- 类型“B”
- 从 DB 接收“A” -> 文本字段值变为 A 而不是 AB。
使用实时同步时,这是所需的行为。对于单个文本输入,这似乎不是一个好的解决方案。如何正确实现这样的 2-way 绑定并避免不良影响,尤其是在 viewModel 在写入之前或从源读取之后处理文本值的情况下?
【问题讨论】:
标签: swift mvvm data-binding realm rx-swift