ListViewがdataSource内のオブジェクトの最新の詳細を表示しないという問題があります。dataSourceは、WinJS.Binding.ListオブジェクトのcreateSortedメソッドを呼び出すことによって作成されます。各オブジェクトは次のようになります。
var obj = {
title: 'First item',
priority: 2
};
そして、次のようにdataSourceを作成/設定します。
sortedItemList = itemList.createSorted(function (lhs, rhs) {
return rhs.priority - lhs.priority;
});
listView.itemDataSource = sortedItemList.dataSource;
ListViewのitemTemplateは次のようになります。
<div id="itemTemplate" data-win-control="WinJS.Binding.Template">
<div>
<h4 data-win-bind="innerText: title"></h4>
</div>
</div>
両方のフィールドの変更ハンドラーは次のようになります。
titleControl.onchange = function () {
curItem.title = titleControl.value;
sortedItemList.notifyMutated(sortedItemList.indexOf(curItem););
};
priorityControl.onchange = function () {
curItem.priority = priorityControl.value;
sortedItemList.notifyMutated(sortedItemList.indexOf(curItem););
};
createSortedのドキュメントには、オブジェクトが変更されるたびに必ずnotifyMutatedを呼び出すように記載されています。優先度を変更すると、ListViewはアイテムを適切に移動します。しかし、タイトルを編集すると、ListViewが更新されて新しいタイトルが表示されません。私は何が間違っているのですか?