为什么这个itemDataSource没有被清除?

Why isn't this itemDataSource being cleared?

本文关键字:清除 itemDataSource 为什么      更新时间:2023-09-26

我试图从我的应用程序中的itemDataSource中删除所有项目。itemDataSource绑定到一个列表视图。

我已经设法删除了一个单一的项目,当它被点击在一个列表视图,但删除所有的项目是导致我的问题:(

这是我用来从itemDataSource中删除单个项目的代码:

//remove the clicked playlist item
var ds = document.getElementById("PlaylistListView").winControl.itemDataSource;
ds.beginEdits();
ds.remove(ds.itemFromIndex(eventInfo.detail.itemPromise._value.index)._value.key);
ds.endEdits();

这是我试图写的代码,以删除所有的项目:

var ds = document.getElementById("PlaylistListView").winControl.itemDataSource;
ds.beginEdits();
console.log(ds._list._keys);
console.log("There are " + ds._list._keys.length + " items in this list");
for (var i = 0; i < ds._list._keys.length; i++) {
    ds.remove(ds._list._keys[i]);
    console.log("Item: " + ds._list._keys[i] + " has been removed from the list");
}
ds.endEdits();

这是我运行这段代码时在控制台中得到的输出:

1,2,3,4,5,6,7,8,9,10,11
There are 11 items in this list
Item: 2 has been removed from the list
Item: 4 has been removed from the list
Item: 6 has been removed from the list
Item: 8 has been removed from the list
Item: 10 has been removed from the list
Item: undefined has been removed from the list

为什么只有一些项被删除?输出和预期的一样,但是是什么原因导致1,3,5,7,9, and 11没有被移除?我注意到序列中有一个模式,每次都是2。

这是因为你正在从列表中删除东西,然后重新索引到它。当你删除第6项时,第7项变成第6项,第8项变成第7项,所以你没有删除(原来的)第7项,而是删除了(原来的)第8项。

如果你只是删除索引0,直到他们没有项目,它应该工作得更好。还可以查看列表上的clear()来支持清除它。

另外,我注意到你使用了很多内部状态(_prefix项)——你可能要小心,因为它们随时都可能改变。