2012-08-29 49 views
1

這個問題聽起來微不足道,只是將virtualLayout設置爲false,但那不是我所追求的。如何防止itemRenderer被Flex中的新實例替換

我有以下情況。我的Flex移動應用程序具有預定義的容器,通常爲總應用程序寬度的一半。用戶可以最大化這些組件,以便它們佔用所有可用的寬度。

當然,對於在ListDataGroup中顯示數據的組件,渲染器必須調整大小。這可以直接使用,但我需要它們在組件最大化時顯示更多信息。 爲了這個工作,我創建了一個非常簡單的方法來更新渲染器;

private function updateRenderer():void { 
      _itemRenderer.properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids}; 
      _list.itemRenderer = _itemRenderer; 
} 

渲染性質,如visibleColumns相應地改變,並且由於渲染器將自動調整大小期間被無效,它們可以與新的屬性重繪。

這一切都很好,但不幸的是,新的渲染器是用這種過程創建的,而不是簡單地重用現有的渲染器並讓它們自己重繪。

有什麼辦法可以改變這種行爲,或者有人知道更好的方式來完成這樣的任務嗎?

+0

這可能會導致成性能問題和內存泄漏。爲什麼不使用狀態? –

+0

沒有內存泄漏和性能明智我沒有看到問題。你在哪裏看到這種更新渲染器的方法的潛在缺陷?但是你說得對,國家可能是更有效的解決方案,我與國家唯一的問題是改變它們的方式。我需要根據主機組件的大小來更新渲染器,但數據對象保持完全相同,因此它不包含有關渲染器應處於哪種狀態的任何信息。 – AlBirdie

+0

@AdrianPirvulescu,第二個想法是,由於渲染器屬性是由外部組件動態設置的,因此無法使用狀態。渲染器屬性是例如標籤及其大小的渲染器,而不是必須根據設置的屬性創建標籤,就像具有動態列的表格行一樣。 – AlBirdie

回答

0

如果我瞭解您顯示的代碼,它將替換itemRenderer屬性;所以「預期」在發生這種情況時,所有現有渲染器都將被銷燬 - 因爲它們是用「舊」渲染器創建的,然後替換爲「新」渲染器的實例。

您可以考慮直接在渲染器更改屬性:如果需要

(_list.itemRenderer as ClassFactory).properties = {isFullScreen: _isFullScreen, headerProperties:_headerProperties, visibleColumns:_visibleColumns, optimalColWidth:_optimalColWidth, grid:this.name, fids:_fids}; 

然後迫使你的數據提供程序刷新,使所有的itemRenderer是重繪:

​​
+0

試過了(第一次進入我的腦海),但不幸的是我得到了一個錯誤1119:「錯誤:」1119:通過靜態類型mx.core:IFactory的引用訪問可能未定義的屬性屬性。 「 – AlBirdie

+0

嘗試將它作爲類工廠投射,我將更新我的答案 – JeffryHouser

+0

不幸的是,這也不起作用,在那個上得到一個referenceError:」無法創建屬性「 - 我的渲染器的屬性 - 」on spark.components .LabelItemRender「,這很奇怪,因爲我之前已經設置了自定義渲染器。 – AlBirdie

相關問題