我有两个tile列表,它们从分配给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>
这些切片列表不在数据网格中 - 它们是编辑形式。
myColumnOne&amp; myColumnTwo有类似的数据:
{label:foo;选中:true}
{label:bar;选中:false}
等...
当数据加载到网格中时,复选框会正确填充。问题是,在检查/取消选中时,如果同一标签出现在myColumnOne&amp; myColumnTwo,两列都被更新,而不仅仅是被点击的列。
是否有任何代码更改可以使其正常运行?
答案 0 :(得分:0)
问题是它们必须引用相同的底层对象,你需要克隆用于列表的dataProviders的对象,只有两个不同的集合并不意味着集合中的对象是不同的(这是好的对于内存性能,但不适合您的情况)。因此,无论您在哪里填充myColumnTwo和myColumnOne,您都必须对放入其中的对象进行“深层复制”,否则它们会共享内存。根据AS3的深层复制意味着创建一个新的对象(如果是这种情况,可以强类型化)并将原始对象的所有属性复制到新的克隆。
另外,您可能想要考虑将项目渲染器定义实际放在他们自己的mxml中,我倾向于在以这种方式内联时理解范围时遇到问题,您认为通过这种方式获得的任何好处都是可能不值得。