2012-03-20 41 views
0

關於ItemRenderers的一個問題:比方說,我有一個ArrayCollection,它是我的應用程序數據坐在全局對象內。我使用這些數據填充一個火花列表,將ArrayCollection設置爲dataProvider。Flex 4.6 Mobile - ItemRenderer和應用程序數據

因此,每個ItemRenderer獲得一個位於數組中的項目的副本。您可以覆蓋「設置數據」方法,將數據設置爲更多特定於域的內容。問題是數據是原始項目的副本。

現在我們假設我們想在ItemRender中添加一些數據到物品。例如,它可以調用項目上的方法,告訴它加載一些關於它自己的細節,或者我們允許用戶修改項目上的某些內容。

顯然,如果我們在複製上進行操作,我們無法做到這一點,因爲只要ItemRenderer被銷燬並且原始對象不知道發生了什麼,它就會被丟棄。

那麼最佳做法是什麼?如果我只是使用的ItemIndex渲染的從我的全球陣列拉出原始項目是這樣的:

{} globalArrayCollection .getItemAt(this.itemIndex)

但對我來說似乎有點笨重。有處理這個問題的最佳做法嗎?

回答

0

不知道我在追隨,但它聽起來像你正在尋找一種方法來獲取您的項目渲染器來設置/更改值。

你可以直接訪問渲染器上的方法。

在您的渲染:

public function setSomeValue(aValue:String):void{ 
    someString = aValue; 

} 

也將設置您的ArrayCollection中的數據也是如此。

要訪問此方法,你可以使用這個:

var dataGroup:DataGroup = list.dataGroup; 
var itemRenderer:YourItemRenderer = dataGroup.getElementAt(list.selectedIndex) as YourItemRenderer; 

itemRenderer.setSomeValue("string"); 
+0

是的,你完全理解了這個問題,是的,這與我提出的解決方案是一樣的。但是你總是需要在兩個地方修改代碼。不是理想的解決方案,但可能是唯一可能的解決方案。我會等幾天看看有人能提供更好的解決方案,否則我會將其標記爲已回答。謝謝 – Andy 2012-03-20 10:10:59

+0

您可以將ArrayCollection的實例傳遞給setSomeValue方法,並讓該函數更新兩個 – francis 2012-03-20 12:00:20

+0

。但是,該實例將是原始數據的副本。同樣的問題。我希望在一個全球性的地方只有一份數據,這太難以問了嗎? :-) – Andy 2012-03-20 14:51:58

0

嗯,爲什麼你認爲如果你在的itemRenderer改變原有的價值觀ArrayCollection中會不會改變?對我來說這工作和初始ArrayCollection更改。

[Bindable] 
protected var model:Model; 

override public function set data(value:Object):void 
{ 
    super.data = value; 
    this.model = value as Model; 
} 

protected function changeValue():void 
{ 
    model.value = "newValue"; 
} 

還是我誤解了一些東西?

+0

我嘗試過使用代碼示例進行響應,但無法使其在此網站上正確格式化。無論如何,如果您執行上面的代碼,原始ArrayCollection不會被修改。嘗試在changeValue方法中放入以下跟蹤:\t \t \t \t trace(「BEFORE MODIFICATION:」); \t \t \t \t trace(「Global variable:」+ MyModel.dataList [itemIndex] .value); \t \t \t \t trace(「Local variable:」+ this.model.value); \t \t \t \t \t \t \t \t this.model.value = 「修改後的值」; \t \t \t \t \t \t \t \t跡( 「變更後:」); \t \t \t \t trace(「Global variable:」+ MyModel.dataList [itemIndex] .value); \t \t \t \t trace(「Local variable:」+ this.model.value); – Andy 2012-03-20 09:50:01

+0

所以我不明白你在做什麼。你的意思是說你已經用靜態dataList創建了類MyModel並試圖修改它?無論如何,我嘗試這種方式,並得到這個結果:之前修改:全局變量:1局部變量:1後修改:全局變量:2局部變量:2因此, – Art 2012-03-21 08:21:26

相關問題