在flex中,我使用了一个组件,该组件从其 dataProvider ( ListCollectionView ) 中显示特定项目 (selectedItem 字段)。
我的 dataProvider 的元素可以通过不同的方式进行编辑。每次编辑时,都会发送一个更新事件,从而更新 dataProvider 集合(ListCollectionView:: listChangeHandler)。
在此过程中,如果我的 selectedItem 是已编辑的元素,它会被删除(通过 ListCollectionView:: moveItemInView设置为 null ),即使已编辑的字段在任何地方都没有使用。
有没有办法避免这种情况?
更具体地说,不必先保存它,让它丢失并在之后恢复它(这在此处几乎不可行)
编辑: 好的,我想我可以进一步解释:
在我的代码中,我对绑定到 dataProvider 的列表中的一项的属性进行了处理。我不知道具体原因,可能是因为项目的类是 [bindable],这会引发更新事件。
此事件被 ArrayList::itemUpdateHandler 捕获,并将其分派给 ListCollectionView::listChangeHandler。此时,事件“kind”是“update”,这对我来说似乎没问题……</p>
但是从那里开始,它转到ListCollectionView::moveItemInView(我认为这是有意义的,因为如果列表已排序,该项目应该必须更新其位置)。此函数将项目从其以前的位置移除并将其添加到其新位置。
当它删除它时,它会发送一个带有“remove”类型的新事件。这就是问题所在:我的组件侦听它使用的数据的删除事件,如果删除了这个元素,则删除它的 selectedItem。
我认为在调用 moveItemInView 时出现问题:ListCollectionView::handlePropertyChangeEvents 中的调用(由 listChangeHandler 调用)是:moveItemInView(updateEntry.item, updateEntry.item, eventItems); (其中 updateEntry.item 是列表的修改项,而 eventItems 是一个空数组)
而它的原型是:私有函数 moveItemInView(item:Object, dispatch:Boolean = true, updateEventItems:Array = null):void
那是一个错误吗?