【发布时间】:2014-03-08 00:49:46
【问题描述】:
在 WinJS 中,获取 ListView 对象中项目数的唯一方法是使用方法 getCount()。
但是这个方法是异步的。
这使得在 for 循环中使用变得非常困难,例如当需要遍历列表中的项目时。
var listView = document.getElementById("listView").winControl;
listView.itemDataSource.getCount().done(
function (numItems) {
for (var i = 0; i < numItems; i++) {
//do your stuff here
}
});
如果我把它放在我的代码的任何部分,我不能从任何函数返回我在循环中读取的值,因为 getCount() 返回一个承诺,使我的函数也返回一个承诺等等......
所以我的问题是为什么?调用方法时不是已经知道列表中的项目数了吗?
【问题讨论】:
-
listView 可以绑定到 StorageDataSource,这并不罕见。它迭代文件,速度慢到需要异步。不,listView 不会为您完成这项工作,它可以避免在视图中只有少数文件实际可见时消耗存储数千个文件所需的内存。很难看出这个问题的答案会有什么帮助。
-
它很有用,因为目前还不清楚列表视图实际上只加载内存中的可见项。
标签: asynchronous windows-8 winjs windows-8.1