Apache flex 为什么我的flex复选框itemrenderer更新了错误的数据源?

Apache flex 为什么我的flex复选框itemrenderer更新了错误的数据源?,apache-flex,datagrid,checkbox,datasource,itemrenderer,Apache Flex,Datagrid,Checkbox,Datasource,Itemrenderer,我有两个平铺列表,用于从分配给datagrid的数组集合中绘制数据: <mx:TileList dataProvider="{myDatagrid.selectedItem.myColumnOne}"> <mx:itemRenderer > <mx:Component> <mx:CheckBox label="{data.label}" selected="{data.selected}" click="{data.selected = th

我有两个平铺列表,用于从分配给datagrid的数组集合中绘制数据:

<mx:TileList dataProvider="{myDatagrid.selectedItem.myColumnOne}">
 <mx:itemRenderer >
  <mx:Component>
   <mx:CheckBox label="{data.label}" selected="{data.selected}" click="{data.selected = this.selected}" />
  </mx:Component>
 </mx:itemRenderer>
</mx:TileList>

<mx:TileList dataProvider="{myDatagrid.selectedItem.myColumnTwo}" >
 <mx:itemRenderer >
  <mx:Component>
   <mx:CheckBox label="{data.label}" selected="{data.selected}" click="{data.selected = this.selected}" />
  </mx:Component>
 </mx:itemRenderer>
</mx:TileList>

这些平铺列表不在datagrid中-它们处于编辑形式

myColumnOne和myColumnTwo的数据相似:

{label:foo;selected:true}
{label:bar;selected:false}
等等

当数据加载到网格中时,复选框会正确填充。问题是,在选中/取消选中时,如果myColumnOne和myColumnTwo中都显示相同的标签,则两列都会更新,而不仅仅是单击的列


是否有任何代码更改可以使其正常运行?

问题是它们必须引用相同的基础对象,您需要克隆用于列表的数据提供程序的对象,只是有两个不同的集合并不意味着集合中的对象不同(这有利于内存性能,但不利于您的情况)。因此,无论您在哪里填充myColumnTwo和myColumnOne,您都必须对放入其中的对象进行“深度复制”,否则它们将共享内存。根据AS3,深度复制意味着创建一个新对象(如果是这种情况,则可能是强类型的)并将所有属性从原始对象复制到新克隆


你也可能想考虑把项目渲染器定义放在他们自己的MXML中,当我这样做时,我倾向于理解范围的问题,不管你从中得到什么好处,这可能不值得。指向完全相同的值。但是,根据您向我们展示的小片段,我们无法判断。请检查UIDUtil。您需要实现IUID,以使具有相同属性的对象在列表中显示为不同的对象(因为列表将检查UIDUtil,查看它们是否相同,如果它们看起来相同,UIDUtil将说它们是).愚蠢,但这就是我们所拥有的。@AmyBlankenship很高兴知道,谢谢你提供的额外信息,我看到过类似的问题,当同一个对象在列表数据提供程序中重复时,但我认为如果我们创建了一个新对象并复制了属性,即使属性100%匹配,也会因为内存增加而单独处理它们ress分配给每个文件,但在查看该文档时,我在调试器中看到的十六进制值可能实际上是UID,而不是我假设的内存偏移量。