У меня есть несколько сложный объект родительской / дочерней иерархии, который мне нужно отобразить в древовидном формате, который динамически обновляется. Чтобы передать его в дерево в качестве поставщика данных, я преобразую родительский элемент верхнего уровня в массив, а затем в коллекцию ArrayCollection. Проблема в том, что если что-то изменится в иерархии, дерево не будет обновлено динамически, если я не перегенерирую поставщика данных.
РЕДАКТИРОВАТЬ: у меня не было много кода, поэтому я просто попытался включить скелетную версию того, как все используется ниже, дерево работает нормально, и даже когда я удаляю / добавляю узлы, изменения очевидны, но вертикальная прокрутка панель не обновляется (не изменяет размер), и если я прокручиваю, дерево выйдет из строя и может отобразить пробел в нижней части дерева, где элемент был только что удален.
Я попробовал просто привязываемый тестовый объект ArrayCollection с несколькими уровнями, и он корректно обновляется, поэтому я думаю, что с моим деревом все в порядке, просто я пытаюсь связать провайдер данных, что у меня возникают проблемы.
AS3 Class 1 - Объект, который может иметь множество дочерних объектов, вызывая insertCustomObject ()
public function CustomObject() {
}
public function insertCustomObject(customObject : CustomObject) : void {
customObject.parent = this;
}
AS3 Class 2 - содержит один CustomObject, который будет иметь много дочерних объектов, и это то, что я хочу отобразить в виде дерева.
public class CustomContainer {
private var _root : CustomObject;
public function rootAsCollection() : ArrayCollection {
return new ArrayCollection(new Array(_root));
}
}
MXML Component 1 - содержит пользовательский компонент дерева и передал его customObjects для использования в качестве поставщика данных
[Bindable]
private var customContainer : CustomContainer;
<component:TreeCustom id="treeCustom" width="100%" customObjects="{customContainer.rootAsCollection()}"/>
MXML-компонент 2 - само дерево принимает параметр customObjects из MXML-компонента 1 для установки поставщика данных.
[Bindable]
private var _customObjects : ArrayCollection;
public function set customObjects(objects : ArrayCollection) : void {
_customObjects = objects;
}
<mx:Tree id="customTree" dataProvider="{_customObjects}" />