Flex AdvancedDataGrid дезактивира отложеното изобразяване

имам компонент AdvancedDataGrid с някои персонализирани редове. Имам ограничен брой видими редове в компонента. Останалите редове могат да бъдат достъпни чрез лента за превъртане. В моето приложение имам бутон Запазване и следващ, който записва действително избрания запис и повтаря избрания елемент от мрежата с 1 до края. За съжаление тази процедура работи само докато стигна до края на видимите редове. След това мрежата се срива, когато избера невидимия ред и се опитам да превъртя там програмно:

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

Открих, че следващият елемент не е инстанциран в този момент. Има ли някаква възможност за изобразяване на всички елементи в мрежата след зареждане или за деактивиране на мързеливото изобразяване?

Проследяването на стека:

TypeError: Грешка #1010: Терминът е недефиниран и няма свойства. в mx.controls.listClasses::AdvancedListBase/makeRowsAndColumnsWithExtraRows()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:4008] в mx.controls.listC момичета: :AdvancedListBase/updateDisplayList()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/listClasses/AdvancedListBase.as:3582] в mx.controls::AdvancedDataGridBaseEx/updateDisplayList()[/ Потребители /justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/AdvancedDataGridBaseEx.as:2033] в mx.controls::AdvancedDataGrid/updateDisplayList()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/project s/ advancedgrids/src/mx/controls/AdvancedDataGrid.as:2907] в mx.controls.listClasses::AdvancedListBase/validateDisplayList()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/advancedgrids/src/mx/controls/listClasses /AdvancedListBase.as:3480] в mx.managers::LayoutManager/validateDisplayList()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:744] в mx.managers ::LayoutManager/doPhasedInstantiation()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:827] в mx.managers::LayoutManager/doPhasedInstantiationCallback()[/Users/ justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:1195]


person Andreas    schedule 27.05.2013    source източник
comment
Ако стартирате в плейъра за отстраняване на грешки, той трябва да ви даде проследяване на стека. Публикуването на проследяването на стека ще ви помогне да се доближите до източника на проблема   -  person flexicious.com    schedule 29.05.2013
comment
Здравейте, направих това и показва само, че scrollToIndexFunction продължава повече от 15 секунди. С тази информация отстраних грешки в ADG и открих, че няма всички елементи в поддържащия списък на изобразения ADG. Когато превъртя ADG до неизобразения елемент, възниква грешка. Ето защо попитах за функцията за мързеливо изобразяване на ADG.   -  person Andreas    schedule 29.05.2013


Отговори (1)


Почти съм сигурен, че функцията за отложено рендиране използва повторно вашите рендери за артикули веднага след преобръщане на екрана (за оптимизиране на производителността). Така че може би трябва да направите това, което правите, само с видимите и то ще остане „направено“ за всички инстанции на рендера?

Сигурни ли сте, че трябва да получите достъп до ДЕЙСТВИТЕЛНИТЕ видими редове, а не до елементите във вашия доставчик на данни, които ги поддържат? Ако достъпът до вашите резервни данни е наред, може би вместо това трябва да преминете през вашия доставчик на данни.

Направих това малко приложение, което превърта и маркира ред с функция, наречена gotoGridItem(index). Превъртам до елемента, преди да се опитам да задам избрания индекс - може би това е причината за срива?

Ето моят код:

<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>
person pseudopeach    schedule 29.05.2013
comment
Здравейте, добра точка. Но тъй като искам да използвам функцията scrollToIndex, трябва да задам selectedIndex. - person Andreas; 30.05.2013
comment
Да, този код помага. ТОЛКОВА ВАЖНА ЗАБЕЛЕЖКА ТУК. 1. scrollToIndex 2. задайте selectedIndex само ако елементът е видим след превъртане. Благодаря ви за пояснението - person Andreas; 31.05.2013
comment
Да, може би завършва инстанцирането на рендерите, след като превърти до тях. - person pseudopeach; 01.06.2013