Я хочу, чтобы встроенное представление могло вызывать функцию из родительского представления, поэтому я пытаюсь, чтобы дочерний элемент ссылался на своего родителя путем инъекции. Кажется, это работает нормально, если встроенный вид создается в Dock:
class TestView : View() {
override val root = vbox {
label("Parent Label")
}
init {
println("Parent is instantiating.")
}
override fun onDock() {
val child = find(TestView2::class)
root.add(child)
}
fun doThing() {
println("Parent is doing a thing.")
}
}
class TestView2 : View() {
val parentClass: TestView by inject()
override val root = hbox {
label("Sub-view label 1")
label("Sub-view label 2")
}
init {
println("Sub-view is instantiating.")
parentClass.doThing()
}
}
Хотя я бы хотел, чтобы он был чище. Я бы предпочел, если бы я мог использовать функцию поиска при создании родительского корня. Это проблема, поскольку вызов дочернего представления в любой части процесса init создает циклический цикл создания экземпляров. Любой способ избежать этого, или мне просто придется согласиться на onDock и разобраться с этим?
РЕДАКТИРОВАТЬ:
Просто чтобы заметить, я снова попробовал метод onDock вреальное, более сложное приложение, и я получил ошибку обнаружения цикла. Так что даже этот метод не гарантированно работает.