为了保障原创作者在本站发表文章的利益, 并维护本站原创的精神, 特声明: RIAShanghai对有以下任何情况之一的文章将不通知作者并直接进行快意删除:
- 非原创, 或者原创但一文多发;
- 各种形式的广告与吹擂;
- 不符合本站文章格式.
欢迎各位读者监督. 谢谢合作. 另: 作为Adobe正式的UG, 我们将把Adobe不定期分发的软件,书籍及各种纪念品赠送给发文活跃的作者, 共同进步.
Flex中Tree动态加载,即在点击之后才加载下级目录的内容.
Tree的属性:
dataDescriptor="{new CategoryTreeDataDiscriptor()}"
dataProvider="{Category.root}" id="treeCategory"
通过root对象与dataDescriptor提供给Tree数据.
初始化成功后即在Tree上监听函数:
treeCategory.addEventListener(TreeEvent.ITEM_OPEN, treeOpenHandler);
在TreeEvent.ITEM_OPEN发生之后,读取数据库或其他数据源的数据,以建立其下级目录.
在用户登录成功之后会立即读取数据并新建其对应的根目录,并将其赋值给静态变量Category.root.
为了提示用户目录正在加载,同时也作为已经加载过的标记,为每个新建的Category中加入一个fake Category;
实现方法: category的代码,在每次新建category的时候都会增加fake,当建立fake时不会增加.
public class Category
{
public static var fake:Category = new Category(true);
fake.label = "Loading..";
[Bindable]
public static var root : Category;
public var id:int;
public var label : String;
public var subCats : ArrayCollection;
public var notes : ArrayCollection;
public var parent : Category;
public function Category(isFake:Boolean=false) {
if(!isFake) {
addSubCat(fake);
}
}....
treeOpenHandler:
如果为第一次展开[即其子目录只有一个,并且为fake],则读取数据源数据,建立其下级目录对象,将下级目录对象加入到该目录的子目录ArrayCollection中.
//Tree响应函数,展开后读取子目录
private function treeOpenHandler(e:TreeEvent):void {
openingItem = e.item as Category;
LogUtils.defaultLog.info(openingItem.label + " is opened");
if(openingItem == Category.fake) {
Alert.show("正在加载,请稍候...");
return;
}
if((openingItem as Category).subCats == null) {
return;
}
if((openingItem as Category).subCats.length !=1 || (openingItem as Category).subCats[0] != Category.fake) {
return;
}
var sql:String =
"SELECT * FROM Cat WHERE user_ID=" + currentUser.id + " AND " + "parent_ID=" + openingItem.id + ";";
SQLUtils.createAndExecuteStatement(conn,sql,null,loadSubCatsOk,loadSubCatsError);
}
//当load正常时,运行,增加子目录,首先会删除fake.
private function loadSubCatsOk(e:SQLEvent):void {
var CatsFromDB:SQLResult = e.target.getResult();
if(CatsFromDB.data == null) {
openingItem.subCats.removeAll();
LogUtils.defaultLog.info(openingItem.label + "没有子目录");
return;
}
openingItem.subCats.removeAll();
for(var i:int=0; i
Comments
请教一个树的重命名问题
请问如何使得在树的同一层不能有同名的节点。
用loop查一下?
在新建新节点的时候,用loop把树的节点的名字都查一下,避免重复?
lw0110's Blog: http://chestnutjoelee.spaces.live.com/