DataGrid中的项未按预期初始化

时间:2014-09-23 13:41:48

标签: actionscript-3 flex events

我似乎遇到了未按预期创建项目的问题,导致事件侦听器未被触发。

我正在使用复选框的DataGrid列,如下所示:

<mx:DataGrid id="gridComponents" height="100%">
    <mx:columns>
        <fwctrl:DataGridCheckBoxColumn id="colChkBox" width="20" selectionChanged="onGridChbBoxChange(event)" />
        <mx:DataGridColumn headerText="Components" dataField="name" width="250"/>
    </mx:columns>
</mx:DataGrid>

fwctrl 是内部库的命名空间。)

以下是 fwctrl:DataGridCheckBoxColumn 的mxml:

<mx:DataGridColumn xmlns:mx="http://www.adobe.com/2006/mxml" resizable="false" xmlns:grid="fwctrl.grid.*" xmlns:CheckBoxColumn="fwctrl.grid.CheckBoxColumn.*">
<mx:Metadata>
    [Event(name="selectionChanged", type="fwctrl.grid.CheckBoxColumn.DataColumnCheckBoxEvent")]
</mx:Metadata>
<mx:Script>
    <![CDATA[
        ...

    ]]>
</mx:Script>
<mx:headerRenderer>
    <mx:Component>
        <CheckBoxColumn:CheckBoxHeaderRenderer textAlign="center" click="checkboxheaderrenderer1_clickHandler(event)">

            <mx:Script>
            ...
            </mx:Script>
        </CheckBoxColumn:CheckBoxHeaderRenderer>
    </mx:Component>
</mx:headerRenderer>
<mx:itemRenderer>
    <mx:Component>
        <mx:Box horizontalAlign="center"
                verticalAlign="middle" enabled="{outerDocument.isEnabled}">
            <mx:Script>
                <![CDATA[
                    ...         


                    protected function checkBox_initializeHandler(event:FlexEvent):void
                    {
                        trace("init checkbox");
                    }

                ]]>
            </mx:Script>
            <mx:CheckBox id="checkBox" click="onCheckBoxClick()" change="onChange(event)" initialize="checkBox_initializeHandler(event)"/>
        </mx:Box>
    </mx:Component>
</mx:itemRenderer>

CheckBoxHeaderRenderer 是一个继承自复选框的类。

使用上面的mxml我通过执行以下操作将ArrayCollection绑定到提供的数据:gridComponents.dataProvider = coll;

绑定checkBox_initializeHandler事件后,我希望看到为我的集合中的每个元素打印一条消息。

实际上,只有没有“脱离网格”的元素才会显示该消息,即如果有滚动条(由于渲染了大量项目),则底部下方的项目网格(即需要滚动的网格)不会打印消息。

这也意味着它们未正确创建且click="onCheckBoxClick()"未正确挂钩且onCheckBoxClick()未被触发。

为什么会发生这种情况?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在Flex中,itemRenderers不是与您的基础数据集合一对一地创建的。您只能获得足够的实例来显示一个屏幕的数据,并在滚动时重复使用这些实例。

要在代码中处理此问题,请重构,以便itemRenderer中的click处理程序更新dataCollection中的属性(例如data.foo = true;)。