次のコードがあります
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