我似乎遇到了未按预期创建项目的问题,导致事件侦听器未被触发。
我正在使用复选框的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()
未被触发。
为什么会发生这种情况?我该如何解决这个问题?
答案 0 :(得分:0)
在Flex中,itemRenderers不是与您的基础数据集合一对一地创建的。您只能获得足够的实例来显示一个屏幕的数据,并在滚动时重复使用这些实例。
要在代码中处理此问题,请重构,以便itemRenderer中的click
处理程序更新dataCollection中的属性(例如data.foo = true;
)。