我有一个有点复杂的父/子层次结构对象,我需要以动态更新的树格式显示。要将它作为数据提供者传递到树中,我将顶级父级转换为数组,然后转换为ArrayCollection。问题是如果层次结构发生任何变化,树不会动态更新,除非我重新生成数据提供者。
编辑:我没有显示太多代码所以我只是尝试包含下面所有内容的骨架版本,树工作正常,即使我删除/添加节点,更改很明显,但垂直滚动bar没有更新(没有调整大小),如果我滚动树就会失败,并且可能会在树的底部显示刚删除项目的空白。我尝试了一个具有多个级别的普通可绑定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组件1 - 包含自定义树组件并将其传递给customObjects以用作数据提供者
[Bindable]
private var customContainer : CustomContainer;
<component:TreeCustom id="treeCustom" width="100%" customObjects="{customContainer.rootAsCollection()}"/>
MXML组件2 - 树本身从MXML组件1接收customObjects参数以设置它的数据提供者。
[Bindable]
private var _customObjects : ArrayCollection;
public function set customObjects(objects : ArrayCollection) : void {
_customObjects = objects;
}
<mx:Tree id="customTree" dataProvider="{_customObjects}" />
答案 0 :(得分:0)
在树中提供子项列表时,应使用ArrayCollection
而不是数组。 <{1}}在添加或删除元素时不会调度更改事件,并且Tree无法相应地更新。
以下是可以由用户组成数据层次结构的类的示例:
Array