2008-09-02 18 views
2
el bir HTTPService çağrı yoluyla alınan xml verileri üzerinden döngü sorunları yaşıyorum

, xml şöyle görünür:Flex'te sonuç nesnelerini nasıl değiştirebilirim?

 

<DataTable> 
    <Row> 
     <text>foo</text> 
    </Row> 
    <Row> 
     <text>bar</text> 
    </Row> 
</DataTable> 
 

webservie sonucu olay ben böyle bir şey yapmak tetiklendiğinde:

 

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!'); 

} 
 

Bu kod daha sonra 1 "Satır" düğümleri döndüğünde çalışır, ancak yalnızca bir "Satır" düğümü varsa o zaman event.DataTable.Row nesnesi bir hata değildir ve kod daha sonra bozulur gibi görünür.

HTTPService sonuç nesnesini kullanmanın uygun yolu nedir? Bir tür XMLList koleksiyonuna veya ArrayCollection'a dönüştürmem gerekiyor mu? Birden Satır elemanları olmadığı sürece

cevap

4

sorun

event.result.DataTable.Row.length 

lengthXMLList bir özelliği olmayan bu ifadesinde yatmaktadır fakat bir yöntem:

event.result.DataTable.Row.length() 

Kafa karıştırıcı, ama bu böyle.

Ekleme:

for each (var node : XML in event.result.DataTable.Row) 
:
aslında, yapılacak en güvenli şey hata yapmak asla bu şekilde, XMLList üzerinde s yineleme zaman zaman bir for each döngü kullanmaktır, okumak için daha az kod ve daha kolay
2

Sıra bir dizi değil ...

Teşekkür ben "E4X'in" için resultFormat ayarı denedim ve bu henüz sorunu çözmek zorundadır. Sinir bozucu. Bunun gibi bir şey yapmalısın, ama bir süredir AS3 yazmamıştım, eğer var olan bir fonksiyon varsa unuturum.

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!'); 
} 
1

Bir Xml nesnesinde saklar ve sonra gereksinim duyduğunuz düğüm değerini aramak için yöntemlerini kullanırdım.

var returnedXml:Xml = new Xml(event.result.toString()); 
İlgili konular