奇怪的行为 - CheckBoxes作为Flex DataGrid中的ItemRenderer - FLEX 3

Fel*_*ida 1 apache-flex datagrid mxml flex3 itemrenderer

我在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>
Run Code Online (Sandbox Code Playgroud)

嗯,每当我选中一个复选框时,其他复选框(在其他行中)会被随机选中或取消选中,如果我向下或向上滚动它们会再次随机选中或取消选中.

有人可以帮我这个吗?

谢谢你的提前

PS顺便说一句,我已经抑制了标签中的起始"<",因为它正在弄乱textEditor,但在我的代码中它们在那里

Jas*_*wne 6

我的猜测是问题不是复选框被随机检查和取消选中.将DataGrid回收其itemRenderers获得更好的内存性能.什么是可能发生的事情是,你检查CheckBoxitemRenderer,并开始滚动,这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>
Run Code Online (Sandbox Code Playgroud)