私は動的に列ヘッダーを使用してテーブルをソートする方法JS &必要ヘルプワークアウトをノックアウトする新たなんです。ノックアウト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 。
それは動的な列名を経由して並べ替えることが可能である場合は、サンプルコードを示してください。 ありがとうございます。 self.sortColumnは、あなたが機能としてそれを呼び出すことで値を取得する必要がどのko.observableあるので
"true"と "false"の代わりに真のブール値を使用してください。空の文字列はtrueに評価されます – cioddi
あなたの指示とサンプルコードをありがとう。 Iは、関数パラメータとして(データ、イベント)を指定した場合、上記サンプルは、作業を行います。 (this.sortFunction = function(data、event){)。しかし、私が最初にId列そのものをクリックすると、降順でのIDを並べ替えることになっています。しかし、不思議なことに値3,1,2,4を与えます。(Idの降順で)代わりに4,3,2,1が必要です。これをもう一度確認してください。再度、感謝します。 – Uwaisul
比較機能であなたが のような値にアクセスすることを確認して[self.sortColumn()]() cioddi