gpt4 book ai didi

kotlin - ItemViewModel 项目为空

转载 作者:行者123 更新时间:2023-12-02 13:24:08 24 4
gpt4 key购买 nike

我有课

  data class Patient(
val birthNumber: String ,
val firstName: String ,
val lastName: String ,
val birthDate: LocalDate ,
val healthInsurance: InsuranceCompany ,
val hospitalizations : List<Hospitalization> = emptyList()
)

机智的 itemViewmodel 类
class PatientModel : ItemViewModel<Patient>() {
val birthNumber = bind(Patient::birthNumber)
val firstName = bind(Patient::firstName)
val lastName = bind(Patient::lastName)
val birthDate = bind(Patient::birthDate)
val healthInsurance = bind(Patient::healthInsurance)
val hospitalizations = bind(Patient::hospitalizations)
}

我试图在我的 View 中将数据从文本字段/组合框绑定(bind)到我的 PatientModel 对象,如下所示
 var model = PatientModel()
val controller: AddPatientController by inject()
override val root = VBox()

init {
title = "Pridat pacienta"

with(root) {

goHome()
form {
fieldset("Personal Information") {
field("First name") {
textfield().bind(model.firstName)
}

field("Last Name") {
textfield().bind(model.lastName)
}

field("birthNumber") {
textfield().bind(model.birthNumber)
}

field("InsuranceCompany") {
combobox<InsuranceCompany> {
items = controller.insuranceComp
}.bind(model.healthInsurance)
}
field("birthDate") {
datepicker().bind(model.birthDate)
}

但最后当我调用 model.item它是空的。

我需要做什么才能获得 data class Patient目的 ?不是 View 模型之一。谢谢

最佳答案

您需要设置 item进入ViewModel .要给它一个新实例,请执行 model.item = Patient(...) .不过,您不一定需要事先执行此操作。

患者实例也可以传递给 ViewModel super 构造函数自动设置item属性:

class PatientModel(patient: Patient) : ItemViewModel<Patient>(patient)

请注意,您需要一个无参数构造函数才能使用带有注入(inject)的 View 模型。

由于您的 Patient类是不可变的,ViewModel 无法自动将数据写回其中。要克服这个问题,请覆盖 onCommitViewModel并为 item 分配一个新值属性,基于当时 ViewModel 属性中的值。
override fun onCommit() {
item = Patient(birthNumber.value, ...)
}

JavaFX 可观察属性旨在与可变数据结构一起使用,因此您必须跳过几个额外的环节才能将它们与不可变值一起使用。

关于kotlin - ItemViewModel 项目为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47113124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com