3

私は現在、ST2のリストで選択されるアイテムを設定する方法を見つけようとしています。私は次のことを見つけました:

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

これにより、リストの最初の2つのアイテムが選択されます。ただし、サーバーからのデータは、選択するリスト内のアイテムのIDを含むcsv形式の文字列です。

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(1つの可能な解決策)を実装する必要があります。

于 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 に答える