2010-09-24 54 views
2

假設我有一個ActionScript類:MyClass並且該類中包含數據。現在,讓我們說,我想,使用數據「爲每個」遍歷:在ActionScript中與「for each」很好地搭配使用?

var myData:MyClass = new MyClass(); 
myData.Populate(fromSource); 

for each(var item in myData) { 
    DoSomethingWith(item); 
} 

當然,這不執行任何操作,因爲MyClass是一個自定義類,而我沒有做什麼特別的呢。

對於MyClass,我需要做些什麼才能使它與「for each」很好地搭配?我可以遞交一個迭代器或枚舉器或其他東西嗎?

回答

3

我相信您需要擴展Proxy類並實現nextValue(index:int)。它由for each使用。

+0

+1是的!這讓我得到了正確的答案。查看我的答案獲得完整的解決方案。 – 2010-09-24 14:37:35

-1

您應該查看for each ... in上的Adobe livedocs頁面。他們在那裏有你的答案。

[for each ... in]迭代集合中的項目並執行每個項目的語句。作爲E4X語言擴展的一部分引入,for each..in語句不僅可用於對於XML對象,對於對象和數組,對於each..in語句只能通過對象的動態屬性進行迭代,而不是對固定屬性進行迭代。固定屬性是一個定義爲類定義一部分的屬性。使用for each..in語句和一個用戶定義類的實例,您必須聲明具有動態屬性的類。

+0

我不認爲這回答我的問題。我不想迭代我的屬性,我想迭代我的類中的數據,這可能會有數千個基於懶惰函數的項目。僅僅聲明具有動態屬性的類是不夠的。 – 2010-09-24 13:46:44

2

好吧,我想通了。

@alxx幫我找到了答案。這裏是一個完整的答案:

public class MyClass extends Proxy 
{ 
    override flash_proxy function nextNameIndex (index:int):int { 
     // This is the command to move to the next item or start over (index == 0) 
     // return an incremented index when there is data 
     // return 0 when you are done. 
    } 

    override flash_proxy function nextValue(index:int):* { 
     // This is the command to get the data 
     // The index that is passed in is the index returned in nextNameIndex 
    } 
} 
相關問題