在我继承的项目上,我需要从使用spark List组件切换到使用mx Tree组件,以便能够将项目分组到目录中。我对Flex / XML非常生疏,所以我想知道我是否可以在正确的方向上轻推如何处理它。
我的问题(详情/数据详情如下):
如何从“学生”节点检测“studentGroup”节点?
树组件需要一个字段用于显示名称。我 必须在'studentGroup'节点和'student'之间有一个共同的名称 节点
我完全做错了吗?
以前我的XML数据是平的(为了清晰起见,我已经删除了所有细节):
<studentList>
<student>
<studentName>Sam</studentName>
</student>
<student>
<studentName>Ruby</studentName>
</student>
</studentList>
新格式是群体和个别学生的混合:
<studentList>
<studentGroup>
<studentGroupName>Chess</studentGroupName>
<student>
<studentName>Betty</studentName>
</student>
</studentGroup>
<student>
<studentName>Sam</studentName>
</student>
<student>
<studentName>Ruby</studentName>
</student>
</studentList>
目前正在使用此(再次简化的)代码解析XML:
for each (var prop:XML in studentsXML.file){
tempArray = new ArrayCollection();
for each(var studentProp:XML in prop.studentList.student){
tempStudent = new Student(studentProp.studentName);
tempArray.addItem(tempStudent);
}
}
我需要改变它,以便'studentGroups'我做一件事而对'学生'我像上面那样处理它。在伪代码中,它看起来像下面但我在语法上绊倒(或者我可能完全偏离轨道?)。
for each (var prop:XML in studentsXML.file){
tempArray = new ArrayCollection();
for each(var studentProp:XML in prop.studentList){
//HOW DO I DETECT A StudentGroup FROM A Student NODE?
if (studentList.studentGroup){
//student group
tempStudentGroup = new StudentGroup(studentProp.studentGroupName);
for each(var student:XML in studentList.studentGroup){
tempStudent = new Student(studentProp.studentName);
tempStudentGroup.add(tempStudent);
}
tempArray.addItem(tempStudentGroup);
}else{
//single student
tempStudent = new Student(studentProp.studentName);
tempArray.addItem(tempStudent);
}
}
}
答案 0 :(得分:0)
我会尝试这样的事情:
for each(var studentGroup:XML in prop.studentGroup)
{
//student group
for each(var student:XML in studentGroup.student) {
tempStudent = new Student(studentProp.studentName);
tempStudentGroup.add(tempStudent);
}
tempArray.addItem(tempStudentGroup);
}
for each(var student:XML in prop.student)
{
//single student
tempStudent = new Student(studentProp.studentName);
tempArray.addItem(tempStudent);
}
答案 1 :(得分:0)
如果想在mx:Tree中使用,你的xml会喜欢这样:
<studentList>
<student label="Chess">
<student label="Bett"/>
</student>
<student label="Sam"/>
<student label="Ruby"/>
</studentList>
这意味着:您应该始终使用唯一字符串来包含任何深度的内容,以及mx:Tree 将这些显示为节点父节点或节点,取决于哪个有子节点。
第一个问题:你可以检查“hasChildren”来区分你的itemRenderer中的学生组和学生。像这样:
override public function set data(value:Object):void {
if( value != null ) {
super.data = value;
if( TreeListData(super.listData).hasChildren ) {
...
你的第二个问题:是的,他们都使用“label”作为显示名称。