Почему этот itemDataSource не очищается?

Я пытаюсь удалить все элементы из itemDataSource в своем приложении. ItemDataSource привязан к списку.

Мне удалось удалить один элемент при нажатии на него в списке, но удаление всех элементов вызывает у меня проблемы :(

Это код, который я использовал для удаления одного элемента из itemDataSource:

//remove the clicked playlist item
var ds = document.getElementById("PlaylistListView").winControl.itemDataSource;
ds.beginEdits();
ds.remove(ds.itemFromIndex(eventInfo.detail.itemPromise._value.index)._value.key);
ds.endEdits();

И это код, который я пытался написать, чтобы удалить все элементы:

var ds = document.getElementById("PlaylistListView").winControl.itemDataSource;
ds.beginEdits();
console.log(ds._list._keys);
console.log("There are " + ds._list._keys.length + " items in this list");
for (var i = 0; i < ds._list._keys.length; i++) {
    ds.remove(ds._list._keys[i]);
    console.log("Item: " + ds._list._keys[i] + " has been removed from the list");
}
ds.endEdits();

Это вывод, который я получаю в консоли, когда запускаю этот код:

1,2,3,4,5,6,7,8,9,10,11
There are 11 items in this list
Item: 2 has been removed from the list
Item: 4 has been removed from the list
Item: 6 has been removed from the list
Item: 8 has been removed from the list
Item: 10 has been removed from the list
Item: undefined has been removed from the list

Почему удаляются только некоторые элементы? Результат соответствует ожидаемому, но почему элемент 1,3,5,7,9, and 11 не удаляется? Я заметил, что в последовательности есть шаблон, который каждый раз равен 2.

Любая помощь будет принята с благодарностью :)


person Joel Murphy    schedule 05.01.2013    source источник


Ответы (1)


Это потому, что вы удаляете вещи из списка, а затем переиндексируете его. Когда вы удаляете элемент 6, элемент 7 становится элементом 6, а элемент 8 становится элементом 7, поэтому вы не удаляете свой (исходный) элемент 7, вместо этого вы удаляете (исходный) элемент 8.

Если вы просто удалите индекс 0 до тех пор, пока не останется элементов, это должно работать намного лучше. Также посмотрите на clear() в списке, чтобы поддержать его очистку.

Кроме того, я заметил, что вы используете множество внутренних состояний (элементы с префиксом _) — вы можете быть осторожны с ними, потому что они могут измениться в любое время.

person Dominic Hopton    schedule 05.01.2013