首先,我是Knockout.js和underscore.js的新手,這是我學習這些庫的第一天。其任務是通過在第一次點擊時按升序對列表進行排序,並在第二次點擊時以降序對其進行排序。使用underscore.js和knockout.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()
以列的降序對其進行排序。
謝謝:)
添加click事件的td's(使用的TD一commonn類)。現在增加一個回調函數此事件在JS這將做你的工作,喜歡彰顯各自的TD(通過改變顏色或樣式) – dreamweiver