回答
嗯..通常你不想直接操作項目渲染器。通常你會更新集合。
如果計時器參考最初是從數據提供者設置,您可能需要設置一個計時器,操作集合在財產......
事情是這樣的:
//Timer listener function (dp is data provider)
protected function handleTimerEvent(event:timerEvent):void
{
for(var i:int = 0; i < dp.length; i++)
{
var o:Object = dp.getItemAt(i);
o.minutes += 1;
if(o.minutes == 60)
{
o.minutes = 0;
o.hour += 1
}
}
dp.refresh();
}
如果分鐘並且在您的項目渲染器中引用了小時,您應該看到每個小時都會更新它。當然,你將不得不添加更好的邏輯來處理其他日期的東西。您可能想要使用日期類來顯示更準確的時間信息。
在項目渲染器中使用計時器事件可能會導致性能下降,具體取決於數據提供者的長度。假設你有100行數據,那就是100個計時器事件!
這個想法是在列表中有一個計時器(及其處理程序)。數據提供者元素具有從定時器啓動(即timer.start())開始的增量時間設置的屬性。我想要的是讓項目管理員知道他們應該重新計算德爾塔時間並相應地對現在進行渲染。遍歷整個集合是我試圖避免的另一種選擇,因爲我想盡可能保持它只讀(這是我正在編寫的大部分只讀控件) – Dan 2012-02-03 17:22:39
無論哪種方式,直接操作dp或修改數據屬性在項目渲染器中具有相同的效果。他們都更新了DP。它是一個被引用的對象,位於同一個內存位置。不同之處在於IR執行它所要做的(呈現數據)並且您的數據操作發生在外部。無論哪種方式都可以工作,但在IR中設置定時器不是性能友好的。即使IR重新使用該對象,您也將顯示調度TimerEvent與IR之外的一個TimerEvent的項目數量。 – 2012-02-03 20:38:47
最簡單的方法,給出的信息是使用一個Timer
引起刷新,並計算時間差在綁定表達式或內commitProperties()
:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true"
initialize="init()"
>
<fx:Script>
<![CDATA[
private var timer:Timer = new Timer(1000);
private function init():void
{
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, timer_timerHandler);
timer.start();
}
private function timer_timerHandler(event:TimerEvent):void
{
// cause a redraw
invalidateProperties();
}
protected override function commitProperties():void
{
super.commitProperties();
var date:Date = new Date();
date.seconds += data.timeOffset;
displayDate = dateFormatter.format(date);
}
[Bindable]
private var displayDate:String;
]]>
</fx:Script>
<fx:Declarations>
<s:DateTimeFormatter id="dateFormatter" dateTimePattern="HH:mm:ss" />
</fx:Declarations>
<s:Label text="{data.label} - {displayDate}"/>
</s:ItemRenderer>
我正在考慮在列表中使用計時器,而不是在項目渲染器上(請記住它們會被回收)。在Flex 3中有invalidateList(),它具有刷新所有渲染器的效果。我在Spark上尋找類似的東西。 – Dan 2012-02-03 05:41:35
嘗試myList.invalidate()
每當你發現發生的變化。
- 1. 狀態改變後更新div渲染
- 2. 如何動態更改項目渲染器中的組件?
- 3. 如何在更改其狀態後僅渲染一個組件?
- 4. 如何動態更改jqplot渲染器?
- 5. Redux狀態不更新/重新渲染
- 6. 如何渲染李項目並排
- 7. React組件在狀態更改後不重新渲染
- 8. React組件不會在狀態更改時重新渲染
- 9. 列表刷新,Flex中的項目渲染器
- 10. 如何更改瀏覽器刷新狀態?
- 11. 並排渲染項目
- 12. 如何更改NSOutlineViewDataSource觸發刷新其他項目
- 13. React路由器在狀態改變後不重新渲染
- 14. 如何根據容器狀態更改容器項目的狀態(WPF/XAML)
- 15. 如何在排序後刷新Flex數據網格的項目渲染器?
- 16. 如何使用Redux更改網址並渲染其他組件
- 17. React組件不會重新渲染另一個容器的狀態更改
- 18. 更改印刷機狀態
- 19. Redux:重新渲染兒童商店狀態更新
- 20. 渲染時刷新表
- 21. 如何在ui.router中更改狀態時正確刷新範圍
- 22. 我們如何根據其項目渲染器的狀態降低列表的高度
- 23. 如何渲染json並同時使用AJAX刷新局部(Rails)
- 24. Rails渲染頭與狀態
- 25. OpenGL渲染狀態管理
- 26. reactjs - 改變狀態不會重新渲染組件
- 27. ListView在react-native的狀態改變後不會重新渲染?
- 28. 爲textInput沒有得到重新渲染時狀態改變
- 29. 以前的狀態是渲染(重複)與新狀態
- 30. Vue列表項不能在狀態變化時重新渲染
將數據綁定到數據提供者 – 2012-02-02 22:53:43