Объект привязки данных Flex, преобразованный в ArrayCollection - PullRequest
0 голосов
/ 24 июня 2011

У меня есть несколько сложный объект родительской / дочерней иерархии, который мне нужно отобразить в древовидном формате, который динамически обновляется. Чтобы передать его в дерево в качестве поставщика данных, я преобразую родительский элемент верхнего уровня в массив, а затем в коллекцию 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}" />

1 Ответ

0 голосов
/ 24 июня 2011

Вы должны использовать ArrayCollection вместо массива, когда вы предоставляете список дочерних элементов в дереве.Array не отправляет события изменения, когда элемент добавляется или удаляется, и Tree не может соответствующим образом обновить.

Вот пример класса, который может быть пользователем для составления иерархии данных:

public class Person extends EventDispatched
{

    public function Person(name:String, children:ArrayCollection)
    {
        super();

        this.name = name;
        this.children = children;
    }

    [Bindable]
    public var name:String;

    [Bindable]
    public var children:ArrayCollection;

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