1


ユーザーがリストビューからアイテムを選択してから、アプリバーから削除ボタンをクリックして、選択したアイテムを削除してもらいたい. 、しかし、リストビューからアイテムを削除するその方法は、グループリストビューであるため、ここでは適用できません。これは、オブジェクトをある順序でソートし、すべてのインデックス (インデックス) を混合するためです。

これは、単純な (グループ化されていない) リストビューから要素を削除するために使用した方法です。

var deleteIndex=0;
var listView=document.getElementById('listview').winControl;
listView.addEventListener('selectionchanged', function () {
          deleteIndex=listView.selection.getIndices();
        });

  function deleteButtonOnClick(){
         data.splice(deleteIndex,1);
     }

これはグループリストビューでは機能せず、リストビューの他のアイテムを削除します... この時点で本当に行き詰まっています。明日までにアプリを完成させなければなりません。

4

2 に答える 2

1

データモデルが不足しているため、コードサンプルを提供することはできませんが、一般的な概念は

  1. 配列内の各オブジェクトに識別可能なデータがあります。DB からのものである場合は、おそらく ID フィールドがあります。
  2. on selectionchanged 選択した項目の ID を取得します
  3. あなたのdeleteButtonOnClick関数では、最初にデータ配列をループし、IDが選択したアイテムと一致するかどうかを確認します。一致すると、オブジェクトのインデックスが得られます
  4. そのインデックスを使用して、配列からスプライスします
于 2013-05-03T19:34:27.900 に答える
0

リストビューにグループ化されたデータが表示されている場合は、リストからグループを作成したことになります。グループ オブジェクトで splice を呼び出す必要があります。

// this is for example. your data model will be different and hence, 
// the createGrouped call details will be different.
var list = new WinJS.Binding.List(data);
var groups = list.createGrouped(
    function groupKey(item)
    {
        return item.brand;
    },
    function groupData(item)
    {
        var result = { title: item.brand };
        return result;
    }
    );
this.groups = groups;
listView.winControl.itemDataSource = groups.dataSource;
listView.winControl.groupDataSource = groups.groups.dataSource;

これで、appbar cmd ハンドラーは、選択したリスト項目を次のように削除します。注 - selectionchanged イベント ハンドラーでは実行しないでください。

_oncmdclick: function oncmdclick(event)
{
    var indices = listView.winControl.selection.getIndices();
    // assuming that delete should only handle single item selection
    if (indices && indices.length == 1)
    {
        this.groups.splice(indices[0], 1);
    }
},
于 2013-05-04T04:05:33.617 に答える