Jestem nowy w nokaucie js & potrzebujesz pomocy w treningu, jak dynamicznie sortować tabelę za pomocą nagłówka kolumny.nokaut js - sortowanie tabel przy użyciu nagłówków kolumn
obserwuję jest częścią mojego kodu:
HTML:
<table>
<thead>
<tr data-bind="click: sortFunction">
<th id='id'>Id</th>
<th id='name'>Name</th>
<th id='description'>Description</th>
</tr>
</thead>
<tbody data-bind="foreach: deptList">
<tr>
<td><span data-bind="text: id" /></td>
<td><span data-bind="text: name" /></td>
<td><span data-bind="text: description" /></td>
</tr>
</tbody>
</table>
moim zdaniem modelu mam następującą funkcję którego używam do sortowania tabeli danych przy użyciu nagłówka tabeli.
ViewModel:
self.deptList = ko.observableArray(mylist);
self.sortColumn = ko.observable("id");
self.isSortAsc = ko.observable("True");
var Dept = function (id, name, description) {
this.id = ko.observable(id);
this.name = ko.observable(name);
this.description = ko.observable(description);
};
var mylist = [
new Dept(1, "Dept 1", "D1"),
new Dept(2, "Dept 2", "D6"),
new Dept(3, "Dept 3", "D3"),
new Dept(4, "Dept 4", "D4")];
self.sortFunction = function (data, event) {
if(self.sortColum === event.target.id)
self.isSortAsc = !self.isSortAsc;
else
{
self.sortColumn = event.target.id;
self.isSortAsc = "True";
}
self.deptList.sort(function (a, b) {
if(self.sortColum === 'id')
{
if(self.isSortAsc)
a.id < b.id ? -1 : 1;
else
a.name < b.name ? 1 : -1;
}
else if(self.sortColum === 'name'){
if(self.isSortAsc)
a.name < b.name ? -1 : 1;
else
a.name < b.name ? 1 : -1;
}
else (self.sortColum === 'description'){
if(self.isSortAsc)
a.description < b.description ? -1 : 1;
else
a.description < b.description ? 1 : -1;
}
});
};
Chociaż powyższy kod działa myślę, że nie powinno być lepszym sposobem, aby to zrobić (mam na myśli przekazując identyfikator kolumny jako parametr), która będzie przydatna, gdy istnieje duża liczba kolumn.
Próbowałem: left [self.sortColumn] < right [self.sortColumn]? -1: 1 , który nie działał zgodnie z oczekiwaniami.
Jeśli istnieje możliwość sortowania za pomocą dynamicznej nazwy kolumny, proszę wyświetlić przykładowy kod. Z góry dzięki.
i używać prawdziwych wartości boolowskich zamiast "prawda" i "fałsz", ponieważ niepuste ciągi oceniają jako prawdziwe – cioddi
Wielkie dzięki za instrukcje i przykładowy kod. Powyższy przykład działa, gdy określam (dane, zdarzenie) jako parametry funkcji. (this.sortFunction = funkcja (dane, zdarzenie) {). Ale powinien sortować identyfikatory w porządku malejącym, jeśli najpierw kliknę kolumnę Id. Ale dziwnie daje wartości 3, 1, 2, 4. Potrzebuję 4,3,2,1 zamiast (dla malejącej kolejności identyfikatorów). Czy możesz to sprawdzić? Dzięki jeszcze raz. – Uwaisul
upewnić się, że w funkcji porównania dostęp wartości jak A [self.sortColumn()]() cioddi