2013-05-27 82 views
0

我有一個AdvancedDataGrid組合元素與一些自定義行。組件中可見的行數有限。其他行可以通過滾動條訪問。在我的應用程序中,我有哈希Save &下一個按鈕,它保存實際選定的記錄並迭代網格的選定項目1直到結束。不幸的是,這個過程只在我到達可見行的末尾時才起作用。Flex AdvancedDataGrid停用惰性渲染

//Bad Crash 
this.documentBrowser.dg.selectedIndex = index + 1; 
this.documentBrowser.dg.validateNow(); 
this.documentBrowser.dg.scrollToIndex(this.dg.selectedIndex); 

我發現下一個元素是不是在那一刻實例化:當我選擇不可見行,並嘗試以編程方式有滾動後的電網崩潰。加載後是否有可能呈現網格中的所有項目或停用惰性渲染?

堆棧跟蹤:

類型錯誤:錯誤#1010:一個術語是不確定的,沒有屬性。 at mx.controls.listClasses :: AdvancedListBase/makeRowsAndColumnsWithExtraRows()[/ Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:4008] at mx.controls。 listClasses :: AdvancedListBase/updateDisplayList()[/ Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:3582] at mx.controls :: AdvancedDataGridBaseEx/updateDisplayList() [/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as:2033] at mx.controls :: AdvancedDataGrid/updateDisplayList()[/ Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGrid.as:2907] at mx.controls.listClasses :: AdvancedListBase/validateDisplayList()[/ U// justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:3480] at mx.managers :: LayoutManager/validateDisplayList()[/ Users/justinmclean/Documents/ApacheFlexSDK /在mx.managers :: LayoutManager/doPhasedInstantiation()[/ Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/manager/LayoutManager.as:827] at mx.managers :: LayoutManager/doPhasedInstantiationCallback()[/ Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:1195]

+0

如果您在調試播放器上運行,它應該給你一個堆棧跟蹤。發佈堆棧跟蹤將幫助您更接近問題的來源 –

+0

您好,我這樣做,它只顯示scrollToIndexFunction持續超過15秒。有了這些信息,我調試了ADG,發現ADG的支持列表中並沒有包含所有元素。當我將ADG滾動到未呈現的項目時,會發生錯誤。這就是爲什麼我問到ADG的惰性渲染功能。 – Andreas

回答

1

我很確定,只要滾動屏幕(以優化性能),惰性渲染功能就會重新使用您的項目渲染器。所以也許你只需要對可見的部分做任何你想做的事情,它將對所有的渲染器實例保持'完成'。

您確定您需要訪問實際可見行本身,而不是您的dataProvider中支持它們的項目嗎?如果訪問你的支持數據是好的,也許你應該迭代你的dataProvider。

我做了這個小應用程序滾動到並突出顯示一個函數名爲gotoGridItem(index)。在嘗試設置selectedIndex之前,我滾動到該項目 - 也許這是什麼讓你崩潰?

這裏是我的代碼:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 

    <mx:AdvancedDataGrid id="theGrid" dataProvider="{rowDataItems}" x="50" y="50"/> 
    <s:NumericStepper id="rowIndSpr" minimum="0" maximum="{theGrid.dataProvider.length-1}" value="{8}"/> 
    <s:Button click="gotoGridItem(int(rowIndSpr.value))" label="Go" y="20" /> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      [bindable] public var rowDataItems:ArrayCollection = new ArrayCollection([ 

       //...lots of data items for rows ... 

      ]); 

      public function gotoGridItem(index:uint):void{ 


       theGrid.scrollToIndex(index); 
       theGrid.selectedIndex = index; 
       theGrid.validateNow(); 
      } 
     ]]> 

    </fx:Script> 
</s:Application> 
+0

你好,好點。但因爲我想使用scrollToIndex函數,我必須設置selectedIndex。 – Andreas

+0

這個代碼有幫助嗎? – pseudopeach

+0

是的,該代碼確實有幫助。這裏有重要記錄。 1. scrollToIndex 2.僅在滾動後該項目可見時才設置selectedIndex。謝謝你的澄清 – Andreas