我有一個使用itemRendererFunction獲取自定義項目渲染器的列表。有沒有辦法只重新評估列表中的一個項目並獲得不同的項目渲染器?如何觸發itemRendererFunction在Flex中的數據更改時再次調用
想象這樣的代碼:
有兩個項目渲染器ItemRendererOne.mxml和ItemRendererTwo.mxml
Data.as
package {
public class Data {
private var _data : Boolean = false;
[Bindable]
public function get data():Boolean {
return _data;
}
public function set data(value:Boolean) : void {
_data = value;
}
public function Data(value : Boolean) {
_data = value;
}
}
}
和主要的應用程序是
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" >
<fx:Script>
<![CDATA[
import mx.collections.ArrayList;
private var dataProvider : ArrayList = new ArrayList([new Data(true), new Data(false)]);
public function getItemRenderer(data : Object) : IFactory {
if (data.data) {
return new ClassFactory(ItemRendererOne);
} else {
return new ClassFactory(ItemRendererTwo);
}
}
protected function button1_clickHandler(event : MouseEvent) : void {
var data : Data = dataProvider.getItemAt(0) as Data;
data.data = !data.data;
}
]]>
</fx:Script>
<s:VGroup>
<s:List dataProvider="{dataProvider}" itemRendererFunction="{getItemRenderer}" />
<s:Button click="button1_clickHandler(event)" />
</s:VGroup>
</s:WindowedApplication>
基本上當有人點擊按鈕時,我想讓getItemRenderer成爲cal再次領導並且列表中的項目用新項目渲染器更新。
不看好這個,所以我沒有張貼作爲一個答案,但你嘗試過myListId.invalidateList()認爲,這將導致其再次調用itemRendererFunction每個元素在列表中。 – shaunhusain 2012-01-30 22:42:40
(我猜你的意思是invalidateDisplayList()) 似乎沒有工作。只有我得到項目渲染器刷新才能完全重置數據提供者。但這會導致所有項目重繪並導致閃爍,我不想要 – lordofthefobs 2012-01-30 22:50:52
我其實的意思是invalidateList(),但我也來自一個主要是Flex 3的角度來看,相信這是一個可用的方法在數據網格上(如果沒有它必須是先進的數據網格),但它導致列表中的項目失效,我相信他們在過去幫助過類似的情景。如果你仍然沒有找到可行的解決方案,我會嘗試建立並找出需要做的事情。 – shaunhusain 2012-02-01 19:29:15