私は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>
私のビューモデルには、テーブルヘッダーを使用してデータテーブルを並べ替えるために使用する次の関数があります。
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;
}
});
};
上記のコードは機能していますが、これを行うためのより良い方法があるはずです(つまり、列IDをパラメーターとして渡すことを意味します)。これは、列が大きい場合に役立ちます。
試してみleft[self.sortColumn] < right[self.sortColumn] ? -1 : 1
ましたが、期待どおりに動作しませんでした。
動的な列名で並べ替えることが可能な場合は、サンプルコードを表示してください。
前もって感謝します。