我是淘汰 js 的新手,需要帮助锻炼如何使用列标题对表格进行动态排序。
以下是我的代码的一部分:
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>
在我的视图模型中,我使用以下函数使用表头对数据表进行排序。
视图模型:
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;
}
});
};
即使上面的代码正在运行,我认为应该有更好的方法来做到这一点(我的意思是将列 id 作为参数传递),这在有大量列时会很有用。
我试过left[self.sortColumn] < right[self.sortColumn] ? -1 : 1
了,没有按预期工作。
如果可以通过动态列名进行排序,请显示示例代码。
提前致谢。