首先,我是 Knockout.js 和 underscore.js 的新手,这是我学习这些库的第一天。任务是通过在第一次单击时按升序单击列标题,在第二次单击时按降序对表格进行排序。
我有这种 HTML 标记:
<table>
<thead>
<tr data-bind="foreach: columnNames">
<td data-bind="text: $data, click: $root.sortColumn, css: { 'active': $root.currentItem() == $data }"></td>
</tr>
</thead>
<tbody data-bind="foreach: persons">
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: formattedAge"></td>
<td data-bind="text: sex"></td>
<td data-bind="text: married"></td>
</tr>
</tbody>
</table>
这个 js 代码为 knockout.js:
function personViewModel()
{
var self = this;
self.currentItem = ko.observable('');
self.columnNames = ko.observableArray([
'Name',
'Age',
'Sex',
'Married'
]);
self.persons = ko.observableArray([...]);
self.sortColumn = function(item)
{
self.currentItem(item);
var sorted = _(self.persons()).sortBy(item.toLowerCase());
self.persons(sorted);
};
};
ko.applyBindings(new personViewModel());
现在的问题是:
是否可以在单击 td 时获取元素描述符,所以我可以在 self.sortColumn 中使用类似“$(this)”的东西?因为现在我可以通过单击适当的列标题对表格进行排序,但我不知道如何标记一个列,它已经被单击(并检查它),使用_(self.persons()).sortBy(item.toLowerCase()).reverse()
, 按列的降序对其进行排序。
谢谢:)