3

我目前正在尝试找出如何在 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 搜索,但似乎无法找到一种方法来迭代列表中的项目并能够检查其支持数据。

4

2 回答 2

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 (一种可能的解决方案)。

于 2013-01-10T17:24:19.890 回答
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);
    });

}
于 2013-01-10T13:32:01.547 回答