動的に更新するツリー形式で表示する必要がある、多少複雑な親/子階層オブジェクトがあります。それをツリーにデータプロバイダとして渡すために、私はトップレベルの親をArrayに変換し、次にArrayCollectionに変換します。問題は、階層内の何かが変更された場合、データプロバイダを再生成しない限り、ツリーが動的に更新されないということです。FlexデータバインディングオブジェクトをArrayCollectionに変換しました
編集:たくさんのコードが表示されていなかったので、下のすべてがどのように使用されているかのスケルトンバージョンを含めるようにしました。ツリーはうまく機能し、ノードを削除/追加しても変更は明らかですが、スクロールバーは更新されません(サイズは変更されません)。スクロールすると、ツリーが壊れてしまい、削除されたツリーの下部に空白が表示されることがあります。
複数のレベルを持つ単純なバインド可能なArrayCollectionテストオブジェクトを試してみましたが、正しく更新されるため、ツリーがうまくいくと思うので、問題を抱えているdataproviderをバインドしようとしています。
AS3クラス1 - insertCustomObjectを(呼び出すことによって、自身の子オブジェクトの多くを持つことができるオブジェクト)
public function CustomObject() {
}
public function insertCustomObject(customObject : CustomObject) : void {
customObject.parent = this;
}
AS3クラス2は - 私が欲しいものである子どもたちの多くを持つことになります単一CustomObjectが含まれていますツリーとして表示されます。
public class CustomContainer {
private var _root : CustomObject;
public function rootAsCollection() : ArrayCollection {
return new ArrayCollection(new Array(_root));
}
}
MXMLコンポーネント1 - カスタム・ツリー・コンポーネントを含み、それを通過するdataProviderとして使用するcustomObjects
[Bindable]
private var customContainer : CustomContainer;
<component:TreeCustom id="treeCustom" width="100%" customObjects="{customContainer.rootAsCollection()}"/>
MXMLコンポーネント2 - ツリー自体は、MXMLコンポーネントからcustomObjectsパラメータを取り込み1それをdataproviderに設定する。
[Bindable]
private var _customObjects : ArrayCollection;
public function set customObjects(objects : ArrayCollection) : void {
_customObjects = objects;
}
<mx:Tree id="customTree" dataProvider="{_customObjects}" />
あなたは 'HierarchicalData'の代わりに、' ArrayCollection'を使用してみましたか?あなたのデータ構造がどのように見えるかを知らなくても、それは今私が持っている最良の提案です。 –