国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

5.7.在Tree控件中使用復雜數據對象

2024-04-27 13:51:57
字體:
來源:轉載
供稿:網友
5.7.1問題
為Tree 控件傳遞復雜數據,并使用Tree 適當地解析它們
5.7.2解決方法
在一個類中實現ITreeDataDescriptor 接口,并該類的新數據描述符中設置一個示例對象給Tree 中dataDescriptor 屬性,
5.7.3討論
使用一個對象和Tree 一起,將對象傳遞給Tree 來實現ITreeDataDescriptor 以解析數據并返回與數據中的對像關系相關的正確信息,XML 數據很容易將自己達到這個目的,但是復雜數據對象可以和為Tree 定義關系的對象一起被適當的使用.

下面的這個例子, ComplexDataType,是一個典型的復雜數據類型:
+展開
-ActionScript
package oreilly.cookbook {
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
public class ComplexDataType extends EventDispatcher {
public static const NAME_CHANGED:String = "nameChanged" ;
public static const OFFICE_CHANGED:String = "officeChanged" ;
public static const RECORD_CHANGED:String = "recordChanged" ;
private var _name:Name;
private var _office:Office;
private var _label:String;
public function ComplexDataType(target:IEventDispatcher=null ) {
super(target);
}
[Bindable(RECORD_CHANGED)]
public function set label(value:String):void {
_label = value;
dispatchEvent(newEvent(RECORD_CHANGED));
}
public function  get label():String { return _label; }
[Bindable(NAME_CHANGED)]
public function set name(value:Name):void {
_name = value;
dispatchEvent(newEvent(NAME_CHANGED));
}
public function get name():Name { return _name; }
[Bindable(OFFICE_CHANGED)]
public function set office(value:Office):void {
_office = value;
dispatchEvent(newEvent(OFFICE_CHANGED));
}
public function get office():Office { return _office; }
}
}


Office 和Name 對象都是由Office 對象的名字和地址組成的簡單值對象,和firstName,lastName 屬性的Name 對象。沒有一個ITreeDataDescriptor 對象來描述ComplexDataType,Office 和Name 所有屬性之間的關系,Tree 將不能完全顯示這些對象的Array 和ArrayCollection,而將顯示Array 中不能使擴展的兩個簡單對象。

ITreeDataDescriptor 接口定義了以下數據:

addChildAt(parent:Object, newChild:Object, index:int, model:Object =null):Boolean
這個方法插入了一個新的對象到結構中,并決定新加對象放在數據結構中的什么位置.

getChildren(node:Object, model:Object = null):ICollectionView

對于所有的結點,這個方法決定這個結點或對象是否有孩子結點可以顯示,如果有孩子結點,該方法將它們返回到CollectionView ,如果沒有,則返回空.

getData(node:Object, model:Object = null):Object
這個方法返回給定結點的所有數據.

hasChildren(node:Object, model:Object = null):Boolean
這個方法決定該結點是否有孩子結點并返回一個布爾值.

isBranch(node:Object, model:Object = null):Boolean
這個方法測試該結點是否是最終結點,并判斷其孩子結點是否能被顯示.

removeChildAt(parent:Object, child:Object, index:int, model:Object =null):Boolean
這個方法從結構中移除一個對象并決定數據結構中結點被移除后將會發生什么

ComplexDataType 的數據描述符正確執行如下:
+展開
-ActionScript
package oreilly.cookbook {
import mx.collections.ArrayCollection;
import mx.collections.ICollectionView;
import mx.controls.treeClasses.ITreeDataDescriptor;
public class ComplexDataCollection implements ITreeDataDescriptor {
public function getChildren(node:Object,model:Object=null):ICollectionView{
var col:ArrayCollection;
if(node is Office){
col = newArrayCollection([node.officeAddress,node.officeName]);
return col;
}
if (node is Name){
col = new ArrayCollection([node.firstName, node.lastName]);
return col;
}
if (node is ComplexDataType){
col = new ArrayCollection([node.office, node.name]);
return col;
}
return null ;
}
public function hasChildren(node:Object, model:Object=null ):Boolean {
if (node is Office){
if (node.officeAddress != "" && node.officeName != "" ){
return true ;
else {
return false ;
}
}
if (node is Name){
if (node.firstName != "" && node.firstName != "" ){
return true ;
else { return false ; }
}
if (node is ComplexDataType){
if (node.office != null && node.name != null ) {
return true ;
else { return false ; }
}
return false ;
}
public function isBranch(node:Object, model:Object=null ):Boolean {
if (node is Office){
if (node.officeAddress != "" && node.officeName != "" ){
return true ;
else {
return false ;
}
}
if (node is Name) {
if (node.firstName != "" && node.firstName != "" ){
return true ;
else {
return false ;
}
}
if (node is ComplexDataType) {
if (node.office != null && node.name != null ) {
return true ;
else { return false ;
}
}
return true ;
}
public function getData(node:Object, model:Object=null ):Object {
if (node is Office) {
return {children:{label:node.officeName, label:node.officeAddress}};
}
if (node is Name) {
return {children:{label:node.firstName, label:node.lastName}};
}
if (node is ComplexDataType){
return {children:{label:node.office, label:node.name}};
}
return null ;
}
public function addChildAt(parent:Object, newChild:Object, index:int,model:Object=null):Boolean {
return false ;}
public function removeChildAt(parent:Object, child:Object, index:int,model:Object=null):Boolean {
return false ;
}
}
}

使用數據描述符并使Tree 控件完全顯示ComplexDataTypes 的數組,簡單地設置一個之前代碼中說到的ComplexDataCollection 類的實例給Tree 的dataDescriptor 屬性:
+展開
-ActionScript
dataDescriptor="{new ComplexDataCollection()}"
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰都县| 井冈山市| 乌海市| 英吉沙县| 桦甸市| 桦南县| 天津市| 隆安县| 阳江市| 保山市| 昌吉市| 搜索| 焦作市| 西平县| 衡阳县| 和顺县| 那曲县| 叙永县| 法库县| 朝阳区| 无为县| 德钦县| 馆陶县| 扶余县| 通江县| 泽库县| 宁波市| 苍南县| 阜南县| 建平县| 云林县| 台江县| 崇左市| 永城市| 年辖:市辖区| 那坡县| 竹北市| 舞钢市| 增城市| 定安县| 多伦县|