获取winjs中listView的所有项目

时间:2014-02-08 14:01:58

标签: javascript windows windows-8 winjs

我在屏幕上有一个listview div,我已成功添加itemDataSource

var lettersList = new WinJS.Binding.List(jsonArrayForClearance);
var list_ = document.getElementById("prodListView").winControl;
list_.itemDataSource = lettersList.dataSource;
list_.itemTemplate = document.getElementById("tileTemplate");
list_.forceLayout();

现在,在每个项目中,我添加了一个自定义输入类型供用户指定(使用模板)。我想遍历列表中的所有项目并获取数组中该输入类型的值。 我怎么能这样做?

编辑:我的问题是访问列表项中声明的自定义输入类型。因此,我们使用以下代码来访问名为“inpT”的任何输入类型

document.getElementById('inpT');

但如何从列表项访问相同的内容?我可以使用以下代码(由user2608614建议)

var listView = document.getElementById("prodListView").winControl;
var list = listView.itemDataSource.list;
for (var i = 0; i < list.length; i++) {
   var item = list.getAt(i);
   item.getElementById('inpT');
}

2 个答案:

答案 0 :(得分:1)

您可以遍历列表元素,如下所示:

    var listView = document.getElementById("prodListView").winControl;
    listView.itemDataSource.getCount()
    .done(function(count) {
        for (var i = 0; i < count ; i++) {
            listView.itemDataSource.itemFromIndex(i)
            .done(function (item) {
                //***item will contain your property
             });
        }
    });

这不是最好的解决方案,因为它很难将承诺链接起来,我也在寻找更好的解决方案。但它确实有效。

答案 1 :(得分:0)

由于你正在使用Binding.List,你可以像数组一样迭代它。

var listView = document.getElementById("prodListView").winControl;
var list = listView.itemDataSource.list;
for (var i = 0; i < list.length; i++) {
    var item = list.getAt(i);
    // do something with this item
}

唯一要记住的是它不支持[],而是必须使用.getAt()和.setAt()。