Enlace de un model de dominio con campos anulables en ItemViewModel

Al ejecutar este código:

class PersonApp : App(PersonView::class) class Person { var name: String? = null } class PersonModel: ItemViewModel<Person>() { val name = bind(Person::name) } class PersonView : View() { val model: PersonModel by inject() override val root = form { textfield(model.name) } } 

Se lanza la siguiente exception:

 Nov 26, 2017 12:18:10 PM tornadofx.DefaultErrorHandler uncaughtException SEVERE: Uncaught error kotlin.TypeCastException: null cannot be cast to non-null type javafx.beans.property.Property<N> at favetelinguis.bfgx.PersonModel$$special$$inlined$bindMutableNullableField$1.invoke(ViewModel.kt:538) at favetelinguis.bfgx.PersonModel$$special$$inlined$bindMutableNullableField$1.invoke(ViewModel.kt:512) at favetelinguis.bfgx.PersonModel.<init>(Exeee.kt:27) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at tornadofx.FXKt.find(FX.kt:413) at favetelinguis.bfgx.Bree$$special$$inlined$inject$1.getValue(Component.kt:954) at favetelinguis.bfgx.Bree$$special$$inlined$inject$1.getValue(Component.kt:151) at favetelinguis.bfgx.Bree.getModel(Exeee.kt) at favetelinguis.bfgx.Bree$root$1.invoke(Exeee.kt:20) at favetelinguis.bfgx.Bree$root$1.invoke(Exeee.kt:17) at tornadofx.FXKt.opcr(FX.kt:454) at tornadofx.FormsKt.form(Forms.kt:23) at favetelinguis.bfgx.Bree.<init>(Exeee.kt:19) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at tornadofx.FXKt.find(FX.kt:413) at tornadofx.FXKt.find$default(FX.kt:398) at tornadofx.App.start(App.kt:79) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 

¿Cuál es la forma idiomática de trabajar con models de dominio donde todos los valores iniciales son nulos y deben establecerse desde la GUI? Así es como puedo cambiar el código anterior para que funcione como se esperaba?

Esto ya debería estar funcionando en TornadoFX 1.7.13-SNAPSHOT, realizamos algunas mejoras en los POJO's numerables. Un enfoque alternativo (y mejor IMO) es usar properties JavaFX en sus objects de dominio:

 class Person { val nameProperty = SimpleStringProperty() var name by nameProperty } 

Una última cosa a considerar es que no ha establecido un elemento inicial en su ViewModel. Recuerde que ViewModel no crea por sí mismo instancias de su artículo, tiene que hacerlo manualmente o incluso darle a ViewModel un elemento pnetworkingeterminado cuando se crea:

 class PersonModel : ItemViewModel<Person>(Person()) { val name = bind(Person::name) } 
  • TornadoFX JavaFX Sync Desplazarse por las vistas de tabla
  • Cómo configurar una aplicación Gluon con Kotlin y Tornado FX
  • TornadoFX cómo agregar validation al editar TableView
  • ¿Cómo llenar el ancho de la tabla disponible con columnas?
  • Context de reinicio de JavaFX
  • No se puede hacer que el nodo se centre en un StackPane con TornadoFX
  • TornadoFX ¿Cómo crear MDI con una list de models de windows hijas?
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Cómo ejecutar tornado fx hello world con java 7
  • Tornadofx tableview sincroniza dos tablas
  • Cómo crear una pantalla de inicio en tornadofx