我有以下代码
class MainView : View("Example") {
val model: UserModel = UserModel()
init {
model.item = User(status = true)
}
override val root = vbox {
useMaxWidth = true
label(model.status)
button("Get new status") {
action {
model.item.updateStatus()
println("Status in model: ${model.status.value}")
println("Status in backing object: ${model.item.status}")
}
}
}
}
class User(var status: Boolean, val api: Api = Api()) {
fun updateStatus() {
status = api.getStatus()
}
}
class UserModel : ItemViewModel<User>() {
val status = bind(User::status)
}
class Api {
fun getStatus(): Boolean {
val list = listOf(true, false)
return list[(Math.random() * list.size).toInt()]
}
}
单击按钮后model.itemProperty
更改但model.status
没有更改。调用model.rollback()
可以解决问题,但我认为这不是在ItemViewModel
更改支持属性后获取更新的正确方法。有没有 TornadoFX 的更新方式UserModel
(以及相应的视图作为结果)而不分配新User
对象model.item
?