我正在尝试从应用程序中的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()以支持清除它。
此外,我注意到您正在使用许多内部状态(带有_前缀的项目),您可能要在这里小心,因为这些状态可能随时更改。
关于javascript - 为什么不清除itemDataSource?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14174546/