Проблема в элементе разборки элементов Flex при сортировке по сетке данных - PullRequest
1 голос
/ 25 июля 2011

Пожалуйста, следуйте моему объяснению здесь:

  1. У меня есть сетка данных, которая содержит провайдер данных с 3 столбцами
  2. один из этих 3 столбцов - кнопка itemrenderer, остальные - целые числа
  3. Я поместил 4 строки в сетку данных
  4. Я установил кнопку в строке, чтобы отключить, другие включены
  5. Затем я пытаюсь отсортировать сетку данных, щелкнув по заголовку столбца с целочисленным столбцом (не столбцом кнопки)
  6. Ожидаемый результат состоит в том, что кнопка отключения будет идти со своей начальной строкой. Но реальный результат заключается в том, что когда вы нажимаете для сортировки 2-3 раза, кнопки (во всех строках) будут иметь проводное поведение. Отключенная кнопка иногда возвращается для включения, а иногда отключается, но остается в неправильном ряду.

Есть ли у кого-нибудь решение по этому вопросу?

Ответы [ 4 ]

0 голосов
/ 26 июля 2011

Звучит так, будто вы неправильно инициализируете свой рендер.Каждый раз, когда вы реализуете пользовательский itemRenderer, лучше всего переопределить методы доступа data (буквально данные).Затем, если, например, вы окрашиваете uicomponent в синий, если свойство «blue» имеет значение true, вы не должны учитывать, что в противном случае uicomponent не будет окрашен из-за того, что itemRenderers перерабатывает вещи каждого компонента на основе списка.Возможно, этот конкретный рендерер был назначен другому объекту данных непосредственно перед этим, а затем, возможно, пользовательский компонент уже синего цвета.Видишь?

0 голосов
/ 26 июля 2011

спасибо за вашу помощь.

Однако, я все равно не настраивал кнопку.Это просто обычная кнопка в flex, но я поместил ее в столбец с помощью itemrenderer.Вот код для построения кнопки управления в сетке

         protected function redispatch(sourceEvent : Event ) : void {                   
                var newEvent : DynamicEvent = new DynamicEvent("aButtonWasClicked",true);                   
                newEvent["commentClickedEvent"] = sourceEvent;
                dispatchEvent(newEvent);
            }                       

            private function dispatchButtObj(sourceEvent:Event):void{
                var newEvent : DynamicEvent = new DynamicEvent("aButtonWasCreated",true);                   
                newEvent["commentCreatedEvent"] = sourceEvent;
                dispatchEvent(newEvent);
            }

    ]]></mx:Script>
<mx:Button label="Comment" height="20" width="48" textAlign="center" creationComplete="dispatchButtObj(event)" click="redispatch(event)"/>  

и вот как я его использую

<mx:DataGridColumn headerText="Action" itemRenderer="com.myitem.controls.CommentButton" width="118" editable="false"/>
0 голосов
/ 26 июля 2011

ItemRendrer всегда используется повторно, если сетка имеет полосы прокрутки и поэтому приводит к странному поведению.

Хорошая статья о жизненном цикле ItemRenderer: http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html от Питера Энта

0 голосов
/ 25 июля 2011

Если ваш рендерер элемента кнопки настроен, вам, вероятно, просто нужно переопределить «установить данные». Пункты поиска повторно используются, и данные изменяются при сортировке. Сами средства визуализации предметов не двигаются.

Отправьте код вашего средства визуализации, и мы сможем дать лучший ответ.

...