如何遍历Ext.dataview.List中的项列表

时间:2013-01-10 11:35:28

标签: sencha-touch sencha-touch-2

我目前正在尝试了解如何在ST2的列表中设置要选择的项目。 我发现了以下内容:

l.select(0, true);
l.select(1, true);

将选择我列表中的前2项。但来自服务器的数据是csv格式字符串,其中列表中的项目的ID将被选中。

e.g. "4, 10, 15"

所以我目前有这个代码。

doSetSelectedValues = function(values, scope) {
    var l = scope.getComponent("mylist");
    var toSet = values.split(",");

    // loop through items in list
    // if item in list has 'id' property matching whatever is in the toSet array then select it.
}

问题是我似乎无法找到迭代列表中项目的方法,然后检查项目的“id”属性,看它是否与数组中的项匹配。

l.getItems()

似乎没有返回项目数组。该列表通过具有“id”&的商店填充。 “itemdesc”属性。我只是想能够从csv字符串中选择这些项目。我已经在这方面搜索了Api,我似乎找不到迭代列表中的项目并能够检查其后备数据的方法。

2 个答案:

答案 0 :(得分:2)

Ext.List项目不是您要查找的项目。 Ext.List对象下的项目是:

Ext.create('Ext.List', {
    fullscreen: true,
    itemTpl: '{title}',
    store: theStore,
    **items: [item1, item2]**
});

当然,Ext.List通常没有像这样的项目。您要找的是 Ext.Store 项。 Ext.Store项目与Ext.List中显示的订单完全相同。 要迭代这些,并选择列表中的相应项,请执行以下操作:

var s = l.getStore();
var itemIndicesToSelect = [];
for (var i = 0 ; i < s.data.items.length ; i++){
    if (arrayContainsValue(toSet, s.data.items[i].data.id)){
        itemIndicesToSelect.push(i);
    }
}

for (var i = 0 ; i < itemIndicesToSelect.length ; i++){
     l.selectRange(itemIndicesToSelect[i], itemIndicesToSelect[i], true);
}

您必须实现函数arrayContainsValue(one possible solution)。

答案 1 :(得分:1)

doSetSelectedValues = function(values, scope) {

    var l = scope.getComponent("mylist"),
        store = l.getStore(),
        toSet = values.split(",");

    Ext.each(toSet, function(id){
        l.select(store.getById(id), true);
    });

}