如何在Cascades中正确地从数据模型中删除项目动画?

时间:2013-11-02 12:40:24

标签: blackberry-10 blackberry-cascades

当我尝试从数据模型中移除项目的动画时,项目将被删除,但显然因为我使用的动画将项目的尺寸设置为0,所以添加到数据模型的下一个项目不可见。要查看它,我必须重新加载整个数据模型,或关闭并重新打开我的应用程序。如果我不做动画,项目将被删除并正确添加,只是没有我想要实现的效果。我的示例代码如下:

ListView {
dataModel: GroupDataModel {
    id: noteDataModel
}

listItemComponents: [
            ListItemComponent {
                type: "item"
                StandardListItem {
                    id: noteItem
                    title: ListItemData.noteTitle
                    description: ListItemData.noteText 
                    animations: [
                        ScaleTransition {
                            id: deleteAnimation
                            toY: 0
                            toX: 0
                            duration: 500
                            onEnded: {          
                              noteItem.ListItem.view.dataModel.remove(noteItem.ListItem.view.dataModel.data(noteItem.ListItem.indexPath));
                            }
                        }
                    ]
                contextActions: [
                        ActionSet {
                            DeleteActionItem {
                                onTriggered: {
                                    deleteAnimation.play();
                                }
                            }
                        }
                    ]
}

1 个答案:

答案 0 :(得分:3)

问题出现的原因是Cascades框架有时会重用对象以获得更好的性能。从数据模型中删除项目并将其维度设置为零时,该对象将在内存中保留一段时间,维度属性设置为0.您添加的下一个项目将重用已删除的项目对象,但具有维度0,所以它不会被看见。

要解决此问题,请更改动画的onEnded事件,并在删除后将项目重新缩放回尺寸1.0:

onEnded: {
     noteItem.ListItem.view.dataModel.remove(noteItem.ListItem.view.dataModel.data(noteItem.ListItem.indexPath));
     noteItem.scaleX = 1.0;
     noteItem.scaleY = 1.0;
}