Я пытаюсь настроить страницу мастера TornadoFX, и на одной из моих страниц есть выбор элемента.Этот выбор вызывает более длительную задачу загрузки данных.Поэтому на странице при изменении выбора я только устанавливаю вид прокси-значения (типа BoardDefinition):
private fun loadBoard(def: BoardDefinition) {
scope.boardDef = def
}
При этом я избегаю ненужной загрузки данных, пока пользователь принимает решение.Мое намерение состояло в том, что только когда пользователь решает двигаться дальше, прокси-сервер расслабляется и данные загружаются.Я попытался переместить загружаемую часть в onSave
, но при асинхронной загрузке мастер переходит на следующую страницу (и эта страница пытается использовать данные, все еще загружаемые):
override fun onSave() {
runAsync {
showProgress(
"Játéktábla betöltése",
"A játéktábla betöltése folyamatban",
ProgressDialog.ProgressMode.INDICATOR,
this
)
// This lazy initialization performs the long-time data loading
scope.board = scope.boardDef.board
} ui {
ProgressDialog.hide()
super.onSave()
}
}
У меня естьнесколько идей, как решить эту проблему.Я мог бы создать объект Future и заблокировать выполнение onSave, пока доступны данные.Или я мог бы добавить страницу, которая только загружает данные, и свойство onComplete установлено для контроля, закончена ли загрузка.И то и другое похоже на взлом.Есть ли более элегантный способ выполнить некоторое время асинхронной задачи, когда пользователь нажимает Next
?