【发布时间】:2011-09-21 15:41:45
【问题描述】:
我有一个有点复杂的父/子层次结构对象,我需要以动态更新的树格式显示它。为了将它作为数据提供者传递到树中,我将*父级转换为数组,然后转换为 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}" />
【问题讨论】:
-
您是否尝试过使用
HierarchicalData而不是ArrayCollection?在不了解您的数据结构是什么样子的情况下,这是我目前最好的建议。
标签: apache-flex actionscript-3