TornadoFX:如何保留 `ItemViewModel` 的 属性?
TornadoFX: How to preserve `ItemViewModel`'s property?
美好的一天。
我正在尝试保留 属性 of ItemViewModel
via config
助手。我能够成功保存 属性(生成 conf
目录和适当的 .properties
文件),但是在下次启动时,属性 不会恢复其值,只是保留null
。这是演示我的问题的示例代码:
import javafx.beans.property.SimpleStringProperty
import tornadofx.*
data class Foo(val doNotPreserveMe: String, val preserveMe: String)
class FooModel : ItemViewModel<Foo>() {
val doNotPreserveMe = bind { item?.doNotPreserveMe?.toProperty() }
val preserveMe = bind { SimpleStringProperty(item?.preserveMe, "pm", config.string("pm")) }
}
class FooApp : App(FooView::class)
class FooView : View() {
private val model = FooModel()
override val root = form {
fieldset {
field("Do not preserve me") { textfield(model.doNotPreserveMe).required() }
field("Preserve me") { textfield(model.preserveMe).required() }
button("Do something") {
enableWhen(model.valid)
action {
model.commit {
// ...
with(config) {
set("pm" to model.preserveMe.value)
save()
}
}
}
}
}
}
}
关于为什么模型没有恢复价值的任何想法?
每个组件都有自己的 config
存储,由单独的文件支持。确保使用相同的配置文件或应用程序全局配置文件。
您可以参考其他组件的 config
存储,因此一种解决方案是让 View 像这样访问 ViewModel 的配置存储:
button("Do something") {
enableWhen(model.valid)
action {
model.commit {
// ...
with(model.config) {
set("pm" to model.preserveMe.value)
save()
}
}
}
}
但是,有一个更简单且包含更多的解决方案,只需在 FooModel 的 onCommit
回调
中处理保存
override fun onCommit() {
with(config) {
set("pm" to preserveMe.value)
save()
}
}
在这种情况下,您只需在按钮回调中调用 model.commit()
。
您还可以使用通用的,甚至是全局的配置对象。使用控制器的配置存储或全局存储。要使用全局配置对象,只需在模型和视图中引用 app.config
。
美好的一天。
我正在尝试保留 属性 of ItemViewModel
via config
助手。我能够成功保存 属性(生成 conf
目录和适当的 .properties
文件),但是在下次启动时,属性 不会恢复其值,只是保留null
。这是演示我的问题的示例代码:
import javafx.beans.property.SimpleStringProperty
import tornadofx.*
data class Foo(val doNotPreserveMe: String, val preserveMe: String)
class FooModel : ItemViewModel<Foo>() {
val doNotPreserveMe = bind { item?.doNotPreserveMe?.toProperty() }
val preserveMe = bind { SimpleStringProperty(item?.preserveMe, "pm", config.string("pm")) }
}
class FooApp : App(FooView::class)
class FooView : View() {
private val model = FooModel()
override val root = form {
fieldset {
field("Do not preserve me") { textfield(model.doNotPreserveMe).required() }
field("Preserve me") { textfield(model.preserveMe).required() }
button("Do something") {
enableWhen(model.valid)
action {
model.commit {
// ...
with(config) {
set("pm" to model.preserveMe.value)
save()
}
}
}
}
}
}
}
关于为什么模型没有恢复价值的任何想法?
每个组件都有自己的 config
存储,由单独的文件支持。确保使用相同的配置文件或应用程序全局配置文件。
您可以参考其他组件的 config
存储,因此一种解决方案是让 View 像这样访问 ViewModel 的配置存储:
button("Do something") {
enableWhen(model.valid)
action {
model.commit {
// ...
with(model.config) {
set("pm" to model.preserveMe.value)
save()
}
}
}
}
但是,有一个更简单且包含更多的解决方案,只需在 FooModel 的 onCommit
回调
override fun onCommit() {
with(config) {
set("pm" to preserveMe.value)
save()
}
}
在这种情况下,您只需在按钮回调中调用 model.commit()
。
您还可以使用通用的,甚至是全局的配置对象。使用控制器的配置存储或全局存储。要使用全局配置对象,只需在模型和视图中引用 app.config
。