为什么这个itemDataSource没有被清除?
Why isn't this itemDataSource being cleared?
我试图从我的应用程序中的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项)——你可能要小心,因为它们随时都可能改变。
相关文章:
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 单击jquery清除输入值
- 如何在Microsoft VirtualEarth 6.3中使用纯javascript清除整个形状层
- 清除以前的$_GET值或不获取仅隐藏字段的值
- Javascript清除缓存以清除基本身份验证凭据
- 清除启动日期选取器值
- 在 SlickGrid 中编辑后,根据不同列中的另一个单元格清除单元格
- php页面,该页面在清除值后接受输入
- 清除数据并将旧值附加到文本框中
- 使用javascript清除Asp.NET FreeTextBox(RTF文本框)
- 如何使Visual Studio自动清除Javascript控制台
- 使用javascript或html本身清除文本字段
- 清除函数中if语句内部不起作用的间隔
- 我应该/如何清除mousemove JQuery事件侦听器
- 从定位目标中的元素中清除类
- 使用查询字符串方法清除浏览器缓存
- 如何在使用AngularJS更改下拉值时清除表单中的数据
- 在Chrome中重新加载页面后清除表单输入值
- 如何清除正在进行的所有JQuery
- 为什么DocumentFragment在追加后被清除