Sono nuovo di knockout js & bisogno di aiuto allenamento come ordinare dinamicamente una tabella utilizzando l'intestazione della colonna.knockout js - Ordinamento tabella utilizzando le intestazioni di colonna
seguito fa parte del mio codice:
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>
Nel mio modello vista ho la seguente funzione, che io uso per ordinare una tabella di dati utilizzando l'intestazione della tabella.
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;
}
});
};
Sebbene sopra codice funzioni Credo ci dovrebbe essere un modo migliore per fare questo (intendo passando l'id colonna come parametro) che sarà utile quando c'è un grande numero di colonne.
Ho provato: lasciato [self.sortColumn] < right [self.sortColumn]? -1: 1 che non ha funzionato come previsto.
Se è possibile ordinare tramite un nome di colonna dinamico, mostrare un codice di esempio. Grazie in anticipo.
e utilizzare valori booleani reali anziché "true" e "false" come stringhe non vuote restituiscono true – cioddi
Grazie mille per le istruzioni e il codice di esempio. L'esempio sopra riportato funziona quando si specifica (dati, evento) come parametri di funzione. (this.sortFunction = function (data, event) {). Ma si suppone di ordinare gli ID in ordine decrescente se inizialmente clicco sulla colonna Id. Ma stranamente dà valori 3, 1, 2, 4. Ho invece bisogno di 4,3,2,1 (per ordine decrescente di Id). Potresti ricontrollare su questo? Grazie ancora. – Uwaisul
fare in modo che nella funzione di confronto si accede valori come un [self.sortColumn()]() cioddi