2

GridPanel 内のストアから多数の RowIndex を取得しています。これらをストアから削除したい。1 つしかない場合でも問題ありません。グリッドからのビューは refrsehd であり、唯一のエントリは離れています。

しかし、たとえば10個のRowIndexesなど、0ne以上ある場合、これを次のようなループで作成します...

for(rowIndex in indexes)
 {
    store.removeAt(indexes[rowIndex]);
 }

...グリッドからいくつかのエントリのみが削除されます。ループが速すぎると思いますか?私はすでにタイムアウトでそれを試しましたが、うまくいきません。アイデアを持っている人はいますか?ありがとう!!!

4

3 に答える 3

4

Ext.data.Store#removeAt回答が既に受け入れられていることは知っていますが、各インデックスを呼び出すとdatachanged、メソッドが呼び出されるたびにイベントが発生することを追加すると思いました。リスナーがある場合datachanged、パフォーマンスの問題や意図しない動作が発生する可能性があります。removeAt(index)は便利なエイリアスであるため、remove(getAt(index))代わりにこれを行うことができます。

function batchRemoveAt(store, indexes) {
    var records = Ext.Array.map(indexes, function (index) {
        return store.getAt(index);
    });
    store.remove(records);
}

これによりdatachanged、削除全体に対して単一のイベントが発生し、削除removeされた各レコードに対して単一のイベントが発生します。

于 2013-09-30T14:59:15.890 に答える