我目前正在尝试了解如何在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,我似乎找不到迭代列表中的项目并能够检查其后备数据的方法。
答案 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);
});
}