Странные блоки проверки поведения в качестве ItemRenderer в Flex DataGrid - FLEX 3 - PullRequest
1 голос
/ 11 февраля 2011

У меня странное поведение в datagridColumn, который я настроил так, чтобы его ячейки отображались как checkBoxes, а не как daFault itemRenderer (т.е. строки).Соответствующий код выглядит следующим образом:

<mx:DataGridColumn sortable="false" textAlign="center" headerText="" width="20" dataField="colCB">
  <mx:itemRenderer>
    <mx:Component>
      <mx:CheckBox selected="true">
        <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            public function change():void{
                //TODO
            }
        ]]>
        </mx:Script>
      </mx:CheckBox>
    </mx:Component>
  </mx:itemRenderer>
</mx:DataGridColumn>

Хорошо, что происходит, когда всякий раз, когда я проверяю флажок, другие флажки (в других строках) получают случайным образом проверяется или не проверяется, и еслипрокрутите вниз или вверх, они снова случайно будут выбраны или не выбраны.

Кто-нибудь может мне помочь с этим?

Спасибо заранее

PS byКстати, я подавил начальный «<» в тегах, потому что он работал с textEditor, но в моем коде они там </p>

1 Ответ

6 голосов
/ 11 февраля 2011

Я предполагаю, что проблема не в том, что флажки выбираются случайным образом и не проверяются. DataGrid перерабатывает itemRenderers для повышения производительности памяти. Вероятно, происходит то, что вы проверяете CheckBox на itemRenderer и начинаете прокручивать, что itemRenderer с установленным флажком используется повторно для отображения других записей с установленным значением selected="true ".

Что я хотел бы сделать, это создать компонент itemRenderer и переопределить метод set data, чтобы установить для выбранного значения флажка то, что должно быть.

Несколько примеров кода для меня с ItemRenderer (вы можете настроить его для своего использования):

<mx:HBox horizontalScrollPolicy="off" verticalScrollPolicy="off">
  <fx:Script>
    <![CDATA[

    override public function set data(value:Object):void
    {
      super.data = value;

      if (value["myCheckBoxData"] != null)
      {
        myCheckBox.selected = Boolean(value["myCheckBoxData"]);
      }

      validateDisplayList();
   }
  ]]>
  </fx:Script>

  <mx:CheckBox id="myCheckBox" />
</mx:HBox>
...