まず第一に、私は Knockout.js と underscore.js を初めて使用します。これらのライブラリを学習するのは今日が初めてです。タスクは、最初のクリックで列ヘッダーをクリックして昇順で、2 回目のクリックで降順でテーブルを並べ替えることです。
この種の 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 の 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 の 1 つがクリックされている間に要素記述子を取得することは可能ですか? _(self.persons()).sortBy(item.toLowerCase()).reverse()
適切な列ヘッダーをクリックしてテーブルを並べ替えることができるようになりましたが、列をマークする方法、既にクリックされている (そしてチェックする) 方法、使用する方法、列の降順で並べ替える方法がわからないためです。
ありがとう:)