我有一个xml字符串作为远程对象获取,如:
<metadata>
<system name="A">
<serviceGroup name="SG1">
<version id="id1" />
<service name="S1"/>
</serviceGroup>
<serviceGroup name="SG2">
<version id="id2" />
<serviceGroup name="SG3">
<version id="id3" />
<service name="S2"/>
</serviceGroup>
</serviceGroup>
</system>
.
.
.
.
</metadata>
正如xml示例所示,它包含嵌套的服务组。 我必须显示所有服务和服务组。 并忽略其他一切......例如。版本 服务即。 S1和S2应该是叶节点,其他一切都必须是父节点
E.g。
- &gt;一种
---&GT; SG1
------&GT; S1
----&GT; SG2
------&GT; SG3
---------&GT; S2
。
。
。
我尝试了所有类似的东西,比如使用labelFunctions,labelField属性和Tree,但它没有帮助。我总是最终得到未标记的树叶。
我想我可以用ITreeDataDescriptor做到这一点,但不知道如何做。 我是一名初学者,而adobe sample并没有太多帮助。
我认为上面的教程对初学者来说太复杂了。 如果有人能指出我更简单的事情,我真的很感激。
谢谢, 和Sandeep
答案 0 :(得分:0)
我认为你的方法可能会让你退缩一点。是否更容易更改控件的默认行为或更改您为该控件提供的数据?
我认为你应该首先将树的数据提取器更改为XMLList metadata.system.serviceGroup(你可能已经这样做了,如果没有你已经尝试过的代码示例,我无法分辨)。然后,您应该遍历该列表并删除版本节点。
delete yourXMLList.serviceGroup.version[0];
您可以搜索谷歌以获得更好的代码示例。
答案 1 :(得分:0)
您需要覆盖ITreeDataDescriptor的getChildren函数。在那里,您可以过滤哪个XML节点应该可见:
package {
import mx.collections.ICollectionView;
import mx.collections.XMLListCollection;
import mx.controls.treeClasses.ITreeDataDescriptor;
public class CustomDataDescriptor extends ITreeDataDescriptor
{
public function getChildren(node:Object, model:Object = null):ICollectionView
{
var list:XMLList = XMLList(node.*);
var listColl:XMLList = new XMLList();
var listLenght:int = list.length()
var j:Number = 0;
// gether items which should be visible
for (var i:int = 0; i < listLenght; i++)
{
if (list[i].localName() != "version")
{
listColl[j] = list[i];
j++
}
}
return new XMLListCollection(listColl);
}
public function hasChildren(node:Object, model:Object = null):Boolean
{
return isBranch(node, model);
}
public function isBranch(node:Object, model:Object = null):Boolean
{
var list:XMLList = XMLList(node.Group);
return list.length() > 0;
}
public function getData(node:Object, model:Object = null):Object
{
return Object(node);
}
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;
}
}
}
并将新的dataDiscriptor分配给树:
<mx:Tree id="customTree" dataDescriptor="{new DisplayGroupsTreeDataDescriptor()}"/>