IDとステータスを含むオブジェクトにバインドされた次のhtmlがあります。ステータス値を特定の色に変換したい (したがって、コンバーター関数 convertStatus)。コンバーターが最初のバインディングで動作していることを確認できますが、バインディング リストのステータスを変更しても、UI の更新は表示されず、convertStatus がその後呼び出されることもありません。私の他の問題は、最初のスパンの id プロパティをバインドしようとしているが、期待どおりに機能していないようです (おそらく、バインディングを介してこの値を設定することはできません...)
HTML:
<span data-win-bind="id: id">person</span>
<span data-win-bind="textContent: status converter.convertStatus"></span>
Javascript (ステータス値を変更するために使用しようとしました):
// people === WinJS.Binding.List
// updateStatus は、システムでステータスが変更された結果として呼び出される関数です
function updateStatus(data) {
persons.forEach(function(value, index, array) {
if(value.id === data.id) {
value.status = data.status;
persons.notifyMutated(index);
}
}, this);
}
コンバーターを使用していない値に対して notifyMutated(index) が機能するのを見てきました。
github プロジェクトによる更新
サンプル用のパブリック リポジトリ (動作していません) - これは、一連の既定のデータを含むリストビューと、アイテムがクリックされたときに実行される関数を備えた、非常に基本的なアプリです。この関数は、アイテムのバインドされたフィールドの 1 つをランダム化し、リストで notifyMutated(...) を呼び出して、ビジュアルの更新をトリガーしようとします。WinJS.Binding.List({ binding: true }); を定義しても リストビュー要素でリロードちらつきを生成するnotifyReload()を介して強制しない限り、更新は表示されません。