2

我有一个本地 SQLite 数据库,其中包含一棵树(作为嵌套集)。在 AIR 应用程序中,我想在树控件中显示该树,并提供更改节点名称和复制、移动、添加或删除节点的方法。

现在,我有点想把代码放在哪里。显然,我有一个类将对数据库执行加载/更新/插入/删除等操作。这会将整个树加载到某个存储变量中,并将用户所做的更改保存回数据库。

此类应该是 dataProvider、dataDescriptor 还是 Tree 控件本身的扩展?当用户请求添加节点等操作时,应该更新dataProvider并让数据库处理程序对事件做出反应,还是应该调用数据库处理程序的方法然后更新dataProvider?我会说后者更好,因为如果 db 查询出现问题,不更新 Tree 的数据会更容易。

在 DefaultDataDescriptor 和 Tree 类中有添加和删除节点的方法(后者中的受保护方法),我应该使用/扩展它们还是忽略它们?

我对此感到困惑的原因是,根据文档,树控件使用存储在其“dataDescriptor”属性中的对象来解析和操作存储在其“dataProvider”属性中的实际数据。

这似乎是有道理的,直到您意识到除非您对它进行子类化,否则操作数据的绝不是 Tree 控件(如果启用了拖放,则除外),也不是 dataDescriptor。相反,在所有示例中,操作数据都是通过 dataProvider 对象直接发生的,这会触发 Tree 控件中的事件处理程序。

什么是我没有得到这里?

4

1 回答 1

1

看看mx.controls.treeClasses.HierarchicalCollectionView。它不是公共 API 的一部分,但它的完整源代码可作为 Flex 的一部分获得。Tree 控制器在内部使用此类来处理各种数据源。

于 2009-01-29T18:12:38.723 回答