Как создать единую наблюдаемую ценность? - PullRequest
0 голосов
/ 09 октября 2019

У меня есть объект контроллера верхнего уровня, который содержит ссылку на три объекта (MyObject). Я бы хотел разместить их точно на странице в любое время, но я бы хотел, чтобы каждый объект также был редактируемым, и я не совсем уверен, как это сделать.

Пока у меня есть класс, который расширяет ItemFragment и отображает мои отдельные элементы, например:

class MyObjectFragment(o: MyObject) : ItemFragment<MyObject>() {

  override val root = hbox {
    ...
  }
}

Между тем, у меня есть вид верхнего уровня со ссылкойна мой контроллер, вот так:

class TopLevelView : View() {

  val controller = TopLevelController()

  override val root = hbox {
    add(MyObjectFragment(controller.myObject1))
    ...
    add(MyObjectFragment(controller.myObject2))
    ...
    add(MyObjectFragment(controller.myObject3))
  }
}

И сейчас все, что у меня есть для контроллера верхнего уровня, это:

class TopLevelController() : Controller() {
  val myObject1 = MyObject()
  val myObject2 = MyObject()
  val myObject3 = MyObject()
}

Я пытаюсь выяснить, что мне нужносделать, чтобы обернуть эти объекты как наблюдаемые значения. Моей первой попыткой было добавить что-то вроде этого в метод init MyObjectFragment:

class MyObjectFragment(o: MyObject) : ItemFragment<MyObject>() {

  init {
    itemProperty.bind(o)
  }

  ...
}

Однако этот метод требует только ObservableValue<MyObject>. Каков наилучший способ связать все это вместе?

1 Ответ

0 голосов
/ 08 ноября 2019

Вы можете создать наблюдаемый список ваших объектов следующим образом:

class TopLevelController() : Controller() {
  val myObjects = FXCollections.observableArrayList<MyObject>(MyObject(), MyObject(), MyObject())
}

Затем в вашем TopLevelView вы можете связать этот список со свойством дочерних элементов узла компоновки и раздувать соответствующий фрагмент для каждогообъект:

class TopLevelView : View() {

  val controller = TopLevelController()

  override val root = hbox {
    bindChildren(controller.myObjects) {
      MyObjectFragment(it).root
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...