При обновлении данных внутри модели можно сохранить порядок сортировки (jsfiddle в конце)? У меня есть следующий код:Сохранение и намек на порядок сортировки при обновлении данных?
<table>
<thead>
<tr>
<th data-bind="sort: { arr: Records, prop: 'Name' }">Name</th>
<th data-bind="sort: { arr: Records, prop: 'Number' }">Number</th>
<th data-bind="sort: { arr: Records, prop: 'Desc' }">Description</th>
</tr>
</thead>
<tbody data-bind="foreach: Records">
<tr>
<td data-bind="text: Name"></td>
<td data-bind="text: Number"></td>
<td data-bind="text: Desc"></td>
</tr>
</tbody>
</table>
<button data-bind="click: changeMe">Remove</button>
<button data-bind="click: resetMe">Reset</button>
Теперь сама сортировка реализуется с помощью bindingHandlers
из этого original post:
var recs = [];
ko.bindingHandlers.sort = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var asc = false;
element.style.cursor = 'pointer';
element.onclick = function(){
var value = valueAccessor();
var prop = value.prop;
var data = value.arr;
asc = !asc;
if(asc){
data.sort(function(left, right){
return left[prop] == right[prop] ? 0 : left[prop] < right[prop] ? -1 : 1;
});
} else {
data.sort(function(left, right){
return left[prop] == right[prop] ? 0 : left[prop] > right[prop] ? -1 : 1;
});
}
}
}
};
function ViewModel(){
var self = this;
self.Records = ko.observableArray();
self.changeMe = function() {
self.Records.pop()
}
self.resetMe = function() {
var recs = []
recs.push({Name: 'Bob', Number: 1, Desc: 'I am awesome'});
recs.push({Name: 'Joe', Number: 2, Desc: 'Another description'});
recs.push({Name: 'Mitch', Number: 3, Desc: 'Something'});
recs.push({Name: 'Steven', Number: 4, Desc: 'Yo'});
self.Records(recs);
}
}
var viewModel = new ViewModel();
recs.push({Name: 'Bob', Number: 1, Desc: 'I am awesome'});
recs.push({Name: 'Joe', Number: 2, Desc: 'Another description'});
recs.push({Name: 'Mitch', Number: 3, Desc: 'Something'});
recs.push({Name: 'Steven', Number: 4, Desc: 'Yo'});
recs.push({Name: 'Robin', Number: 6, Desc: 'Hello'});
recs.push({Name: 'Batman', Number: 7, Desc: 'Description'});
recs.push({Name: 'John', Number: 5, Desc: 'Ok'});
viewModel.Records(recs);
ko.applyBindings(viewModel);
Например, рассмотрим этот JSFiddle и следующий ряд взаимодействий:
- Нажмите на столбец, чтобы строки отсортировались по этому столбцу. Дважды нажмите «Номер», чтобы отсортировать его в порядке убывания.
- Теперь нажмите «Сброс», чтобы имитировать вызов ajax (т. Е. Предположим, что я обновляю модель). Теперь порядок сортировки восстанавливается в оригинале.
Как сохранить порядок сортировки, т. Е. Помнить, что его следует сортировать по «Число» в порядке убывания? И, конечно, покажите это каким-то образом рядом с колонкой? Нечто похожее на то, как это делает datatables (обратите внимание на стрелки вверх и вниз рядом с каждым именем столбца).
Любые предложения?
может быть, посмотрим на решение, которое я предложил вам? – AntouanK