所以對這類問題沒有「一個真實的答案」不過,我可以給你一些建議,告訴我如何解決這個問題。
首先,您將需要加載和分析整個XML文檔;您將希望在一次傳遞中將數據轉換爲ActionScript 3對象(又名模型對象),然後丟棄XML對象;這樣做的原因是因爲accessing properties of an XML Object in AS3 is very, very slow。編寫解析器非常簡單, (順便說一下:我已經寫了一篇關於marshalling data to and from XML的相當深入的博客文章);對於這個答案的緣故,讓我們假設你有一個XML文件,它看起來有點像這樣:
<group name="AS3 Developers">
<member name="jonnyreeves" rep="440" />
<member name="mheavers" rep="243" />
</group>
最局部模型對象圖將包括一個Group
模型和Member
型號,如:
public class Group {
public var name : String;
public var members : Array; /* of Member objects */
}
public class Member {
public var name : String;
public var rep : uint;
}
一旦你的分析器在XML文檔上發揮了神奇的作用,你應該留下一個Group對象數組;這應該然後被存儲在一個新的模型,它可以爲您提供快捷方便地訪問到它包含的數據:
public class GroupListModel {
private var _groups : Array;
public function GroupListModel(groups : Array) {
_groups = groups;
}
public function getGroup(name : String) : Group {
// TODO Use a lookup table here instead.
for each (var group : Group in _groups) {
if (group.name == name) {
return group;
}
}
return null;
}
public function getMembersWithRepGreaterThan(value : uint) : Array {
const result : Array = [];
for each (var group : Group in _groups) {
for each (var member : Memeber in group) {
if (member.rep > value) {
result.push(member);
}
}
}
return results;
}
}
這樣就可以把所有的檢索(修改)的GroupListModel內部方法;改善encapsulation。
因此,至於顯示它們 - 這取決於你如何計劃向用戶展示它們。我同意,如果存在大量DisplayObject,那麼您不想過度創建與會員相關聯的所有DisplayObject,否則由於DisplayObject的複雜性,創建DisplayObject會很昂貴。
有幾種方法你可以採取,通過分頁的內容,你可以使用ItemRenderer風格的方法,其中的實例只創建時,當他們是必需的。另一種選擇是使用具有可重置的View對象,這些對象可以放置在ObjectPool以供以後重新使用。哪種方法最終會導致我將推薦保持金科玉律 - 保持簡單 - 先讓它工作,然後再考慮性能和內存使用情況。
最後,我沒有提到有框架來幫助解決這些架構問題,最受歡迎的兩個是PureMVC和RobotLegs;我建議你花一些時間學習如何工作,如果你有興趣改進你的工藝。
這太棒了,謝謝。 – mheavers 2011-05-24 15:33:44