0

アプリケーションの itemDataSource からすべてのアイテムを削除しようとしています。itemDataSource はリストビューにバインドされています。

リストビューでクリックされたときに単一のアイテムを削除することができましたが、すべてのアイテムを削除すると問題が発生します:(

これは、itemDataSource から 1 つのアイテムを削除するために使用したコードです。

//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 であることに気付きました。

どんな助けでも大歓迎です:)

4

1 に答える 1

2

これは、リストから物事を削除してから、インデックスを再作成しているためです。アイテム6を削除すると、アイテム7がアイテム6になり、アイテム8がアイテム7になるため、(元の)アイテム7を削除せずに、代わりに(元の)アイテム8を削除します。

アイテムがなくなるまでインデックス0を削除すると、はるかにうまく機能するはずです。また、リストのclear()を見て、クリアをサポートします。

さらに、多くの内部状態(_-プレフィックス付きのアイテム)を使用していることに気付きました。これらはいつでも変更される可能性があるため、注意が必要な場合があります。

于 2013-01-05T18:56:03.240 に答える