ViewModel には、ビューで管理されている配列を返す observableArray と計算済みがあります。
var operators = ko.observableArray([]);
var records = ko.computed(function () {
return operators();
});
これが私のソート方法です。
Order = function (data, event, colName) {
var th = $('#th-' + colName),
attr = th.data('sort');
setAttribute(th, attr); //switch data-sort between 'asc' and 'desc'
if (attr === 'asc') {
operators = operators.sort(function (a, b) {
return (a.fullname === b.fullname) ? 0 : (a.fullname < b.fullname ? -1 : 1);
});
}
else {
operators = operators.sort(function (a, b) {
return (a.fullname === b.fullname) ? 0 : (a.fullname > b.fullname ? -1 : 1);
});
}
};
そして、これはビューです:
<table id="table-hour">
<thead>
<tr>
<th data-bind="click: function(data, event) { Order(data, event, 'fullname')}" data-sort="asc" id="th-fullname">Fullname</th>
</tr>
</thead>
<tbody>
<!-- ko foreach: records -->
<tr>
<td>
<span data-bind="text: fullname"></span>
</td>
</tr>
<!-- /ko -->
</tbody>
まあ、並べ替え機能は魅力のように機能します。実際、ブラウザでデバッグすると、配列が両方の方法で並べ替えられていることがわかりますが、ビューは初めて更新されます。この問題を解決するにはどうすればよいですか?