Tornadofx - принудительное оформление с помощью специального валидатора - PullRequest
0 голосов
/ 24 августа 2018

Я бы хотел, чтобы tornadofx украсил валидацию, которую я добавил методом model.addValidator() сразу после загрузки фрагмента.Я использую model.validate(decorateErrors = true)

Кажется, это работает с валидаторами, которые были добавлены с расширением validator, но не с теми, которые добавлены с использованием model.addValidator()

. Я предоставил пример коданиже.В этом примере валидатор в текстовом поле работает должным образом, а валидатор на кнопке - нет.

Resulting UI

Вот после нажатия кнопкидважды:

Resulting UI after clicks

Как видно из фрагмента, на тестовой кнопке нет красного треугольника.Однако, если нажать кнопку теста, валидатор начнет работать правильно.

Вот пример кода:

class ExampleDomain {

    private val testBooleanProperty = SimpleBooleanProperty(false)
    fun testBooleanProperty() = testBooleanProperty
    var testBoolean by testBooleanProperty

    private val testStringProperty = SimpleStringProperty("")
    fun testStringProperty() = testStringProperty
    var testString by testStringProperty

}

class ExampleModel : ItemViewModel<ExampleDomain>(ExampleDomain()) {
    val testBooleanProperty = bind(ExampleDomain::testBooleanProperty)
    val testStringProperty = bind(ExampleDomain::testStringProperty)
}

class ExampleFragment : Fragment() {

    val model by inject<ExampleModel>()

    val validatedButton = button("test") {
        action {
            model.testBooleanProperty.value = !model.testBooleanProperty.value
        }
    }

    override val root = vbox {
        padding = Insets(10.0, 10.0, 10.0, 10.0)
        spacing = 5.0

        textfield(model.testStringProperty) {
            validator {
                println(it)
                when (!model.testStringProperty.value.isNullOrEmpty()) {
                    true -> success()
                    false -> error()
                }
            }
        }
        children += validatedButton
    }

    init {

        model.addValidator(validatedButton, model.testBooleanProperty) {
            when (model.testBooleanProperty.value == true) {
                true -> success()
                else -> error()
            }
        }

        model.validate(decorateErrors = true)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...