2013-09-26 4 views
2

У меня есть куча RowIndexes из магазина в моей GridPanel. Я хочу удалить их из своего магазина. Если у меня есть только один, это не проблема, представление из сетки refrsehd и единственная запись отсутствует.Extjs: Удалить строку из магазина-> store.removeAt (RowIndex)

Но когда у меня есть больше, чем 0ne, например, 10 RowIndexes и я делаю это в цикле, как здесь ...

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

... только несколько записей удаляются из сетки. Я думаю, что цикл слишком быстрый? Я уже проверил его с таймаутом, но не работает. Есть ли у кого есть идеи? СПАСИБО !!!

ответ

6

Я хотел бы попробовать удалить строки в обратном порядке. Вы пробовали это? Что-то вроде

var i = indexes.length - 1; 
for (; i >= 0; i--){ 
    store.removeAt(indexes[i]); 
} 
+0

Действительно круто! ЭТО РАБОТАЕТ! БОЛЬШОЕ СПАСИБО!!! Не знает, почему он работает наоборот, но он это делает! – Zwen2012

+1

Это потому, что вы изменяете индекс строки для следующих строк при удалении строки. Например. при удалении строки с индексом 5 строка с индексом 6 перемещается в индекс 5. – toree

+0

Спасибо за эту информацию! – Zwen2012

0

попытка вызов remove метода store которого acceps экземпляра модели или массив экземпляров, чтобы удалить или массив индексов, из которых можно удалить записи.

store.remove([1,2,3]);

проверка docs

+0

Спасибо, но вид сетки не обновляется после этого действия. Только когда я нажимаю REFRESH-BUTTON На панели инструментов страницы удаленные записи отсутствуют. Попробовал его с Ext.getCmp («ProvGrid»). GetView(). Refresh(); Но не работает – Zwen2012

+0

как на складе ссылается? через переменную или непосредственно из связанного компонента – MMT

+0

Магазин определен в моей функции init из моего контроллера: var store = Ext.getCmp ('ProvGrid'). getStore(); ... refrence работает для других функций, поэтому я думаю, что это не может быть проблемой ?! – Zwen2012

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 события для каждой записи удалены.

+0

Спасибо за полезную информацию! – Zwen2012

Смежные вопросы