Flex에서 결과 개체를 어떻게 반복합니까?
-
09-06-2019 - |
문제
HTTPService 호출을 통해 수신된 XML 데이터를 수동으로 반복하는 데 문제가 있습니다. XML은 다음과 같습니다.
<DataTable>
<Row>
<text>foo</text>
</Row>
<Row>
<text>bar</text>
</Row>
</DataTable>
webservie 결과 이벤트가 시작되면 다음과 같은 작업을 수행합니다.
for(var i:int=0;i<event.result.DataTable.Row.length;i++)
{
if(event.result.DataTable.Row[i].text == "foo")
mx.controls.Alert.show('foo found!');
}
이 코드는 1개 이상의 "Row" 노드가 반환된 경우 작동합니다. 그러나 "Row" 노드가 하나만 있는 경우 event.DataTable.Row 개체는 오류가 아니며 이후에 코드가 중단되는 것 같습니다.
HTTPService 결과 개체를 반복하는 적절한 방법은 무엇입니까?이를 XMLList 컬렉션이나 ArrayCollection 유형으로 변환해야 합니까?resultFormat을 "e4x"로 설정해 보았지만 아직 문제가 해결되지 않았습니다.
감사해요
해결책
문제는 이 말에 있다
event.result.DataTable.Row.length
length
의 재산이 아니다 XMLList
, 그러나 방법은 다음과 같습니다.
event.result.DataTable.Row.length()
혼란스럽지만 원래 그렇습니다.
덧셈: 실제로 가장 안전한 방법은 항상 for each
반복할 때 루프 XMLList
그렇게 하면 실수를 하지 않고, 코드도 적고 읽기 쉽습니다.
for each ( var node : XML in event.result.DataTable.Row )
다른 팁
Row 요소가 여러 개 없으면 Row는 배열이 아닙니다.짜증난다.이와 같은 작업을 수행해야 하지만 한동안 AS3를 작성하지 않았기 때문에 존재 함수가 있는지 잊어버렸습니다.
if (exists(event.result.DataTable) && exists(event.result.DataTable.Row)){
if (exists(event.result.DataTable.Row.length)) {
for(var i:int=0;i<event.result.DataTable.Row.length;i++)
{
if (exists(event.result.DataTable.Row[i].text)
&& "foo" == event.result.DataTable.Row[i].text)
mx.controls.Alert.show('foo found!');
}
}
if (exists(event.result.DataTable.Row.text)
&& "foo" == event.result.DataTable.Row.text)
mx.controls.Alert.show('foo found!');
}
나는 이를 Xml 개체에 저장한 다음 해당 메서드를 사용하여 필요한 노드 값을 검색합니다.
var returnedXml:Xml = new Xml(event.result.toString());
제휴하지 않습니다 StackOverflow