У меня есть следующий xml:
<objects>
<property name="steps">
<property name="array">
<object type="com.tn.assistant.models.Step">
<property name="preDialogues">
<property name="array">
<object type="com.tn.assistant.models.Dialogue"/>
</property>
</property>
<property name="question">
<object type="com.tn.assistant.models.Question">
</object>
</property>
</object>
</property>
</property>
</objects>
Я показываю это с деревом в приложении Flex 4 / air. Мне нужно отфильтровать "шаги", любые узлы "массива" и "предварительные диалоги". Они не должны появляться на дереве, но их дети должны. Я расширил DefaultDataDescriptor и переопределил getChildren (), чтобы успешно фильтровать шаги и теги массива.
override public function getChildren(node:Object, model:Object=null):ICollectionView
{
var ch:XMLList = new XMLList (node.xns::*);
var retXMLList:XMLList = new XMLList();
var retXMLListCtr = 0;
for (var i = 0; i < ch.length(); i++){
if (ch[i].@name == "array"){
return getChildren(ch[i]);
}
else if (ch[i].@name == "steps"){
return getChildren(ch[i]);
}
/*
else if (ch[i].@name == "preDialogues"){
return getChildren(ch[i]);
}
*/
else {
retXMLList[retXMLListCtr] = ch[i];
retXMLListCtr++;
}
}
var chil:XMLListCollection = new XMLListCollection (retXMLList);
var chil2:ICollectionView = ICollectionView(chil);
return chil2;
}
Этот код успешно отфильтровывает "шаги" и "массив". Однако, если я раскомментирую код «preDialogues», чтобы попытаться отфильтровать preDialogues, вопросный узел будет полностью пропущен. Я понимаю, почему это происходит, но что я могу с этим поделать? Это было некоторое время, так как я сделал рекурсию. Я думал, что смогу вернуть какой-то комбинированный список или что-то в этом роде, но я ничего не могу заставить работать. Спасибо.