KnockoutJS를 사용하여 정렬 가능한 표를 만들고 있습니다. 테이블은 정상적으로 작동하지만 사용자가 특정 헤더를 클릭 할 때 열 머리글 옆에 위쪽 화살표가 나타나게하고 싶습니다. 다시 클릭하고 위쪽 화살표가 아래를 향해야합니다. 먼저 화살표가 "Age"열을 향해야합니다.화살표가있는 녹아웃 JS의 표 정렬
지금은 화살표가 표시되지 않습니다. 내 코드에서이 문제의 원인은 무엇입니까?
HTML :
<table>
<thead>
<tr data-bind="foreach: headers">
<td data-bind="click: $parent.sort, text: title">
<span data-bind="if: arrowDown"> v </span>
<span data-bind="if: arrowUp">^</span>
</td>
</tr>
</thead>
넉 아웃 : 관찰 헤더 항목에 대한
var viewModel = function(){
var self = this;
self.people = ko.observableArray([
{firstName:'James',lastName:'Smith',age:38},
{firstName:'Susan',lastName:'Smith',age:36},
{firstName:'Jeremy',lastName:'Smith',age:10},
{firstName:'Megan',lastName:'Smith',age:7},
{firstName:'James',lastName:'Jones',age:40},
{firstName:'Martha',lastName:'Jones',age:36},
{firstName:'Peggy',lastName:'Jones',age:10}
]);
self.headers = [
{title:'First Name',sortPropertyName:'firstName', asc:true, arrowDown: false, arrowUp: false},
{title:'Last Name',sortPropertyName:'lastName', asc:true, arrowDown: false, arrowUp: false},
{title:'Age',sortPropertyName:'age', asc:true, arrowDown: false, arrowUp: true}
];
self.activeSort = self.headers[2];
self.sort = function(header, event){
if(self.activeSort === header) {
header.asc = !header.asc;
header.arrowDown = !header.arrowDown;
header.arrowUp = !header.arrowUp;
} else {
self.activeSort.arrowDown = false;
self.activeSort.arrowUp = false;
self.activeSort = header;
header.arrowDown = true;
}
var prop = header.sortPropertyName;
var ascSort = function(a,b){return a[prop] < b[prop] ? -1 : a[prop] > b[prop] ? 1 : a[prop] == b[prop] ? 0 : 0; };
var descSort = function(a,b){return a[prop] > b[prop] ? -1 : a[prop] < b[prop] ? 1 : a[prop] == b[prop] ? 0 : 0; };
var sortFunc = header.asc ? ascSort : descSort;
self.people.sort(sortFunc);
};
};
ko.applyBindings(new viewModel());
샘플을 jsfiddle.net –
http://jsfiddle.net/xa6RH/ – user1787531