我正在發佈我正在使用的TileList的示例項目渲染器。我把它分解成一個非常基本的渲染器。
這是我運行它時得到的痕跡。
1)createChildren被稱爲
2)的commitProperties被稱爲
3)removeFromStage被稱爲
爲什麼項目渲染器調用REMOVED_FROM_STAGE被調用
我不知道爲什麼removeFromStage獲取調用,但顯然是在尋找後ListBase刪除它由於某種原因。
我真正想做的最終結果是當它從列表中滾動時停止加載圖像,顯然,我無法使用REMOVED_FROM_STAGE事件,因爲在列表初始化過程中會觸發此事件。
之所以這樣做是因爲當我在列表中有幾百個項目時,每個項目最多可以有9個圖像。
當用戶滾動到3/4的方式時,會有很長的延遲,直到縮略圖趕上加載。
我希望REMOVED_FROM_STAGE可以讓我清空image.source屬性或其他東西,但這是做不到的。
從技術上講,據我所知,渲染器從不移動位置的數據和內容的移動。
所以我想我真正要問的是有沒有一種方法來優化代碼,我可以停止圖像加載或任何其他想法,使滾動更有效?
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
import mx.controls.Image;
override public function set data(val:Object):void{
super.data = val;
if(!this.thumbnailContainer){
return;
}
if(!val){
return;
}
if(this.data.images.length != this.thumbnailContainer.numChildren){
this.createChildren();
}
}
override protected function createChildren():void{
super.createChildren()
if(this.data == null){
return;
}
for(var i:int = 0; i < this.data.images.length;i++){
var thumbnail:Image = new Image();
thumbnail.addEventListener(Event.COMPLETE, onLoad);
thumbnail.addEventListener(Event.REMOVED_FROM_STAGE, removeFromStage);
var p:Panel = new Panel();
p.addChild(thumbnail)
p.height = 120
p.verticalScrollPolicy = 'off';
p.horizontalScrollPolicy = 'off';
thumbnailContainer.addChild(p)
}
}
override protected function commitProperties():void{
super.commitProperties();
for(var i:int = 0 ;i<this.data.images.length;i++){
var p:Panel = (this.thumbnailContainer.getChildAt(i) as Panel)
var img:Image = (p.getChildAt(0) as Image)
img.source = this.data.images[i].src
}
}
private function removeFromStage(e:Event):void{
trace('removeFromStage')
}
private function onLoad(e:Event):void{
trace('onLoad')
var img:Image = e.currentTarget as Image;
var scale:Number = (img.parent.height - 50)/img.contentHeight;
img.scaleX = scale;
img.scaleY = scale;
}
]]>
</mx:Script>
<mx:HBox id="thumbnailContainer" />
那麼你的工作是什麼? –
哈哈!我完全跳過了Flex,並開發了自己的列表組件。 –
在這聽起來好像很有趣。 –