Javascript Knockout.js可观察数组中的排序数组
我按照本教程创建了可排序表 当我有一个数组,其元素对应于一个表的列时,它非常有效。但是,我有一个可观察的array(rank),它的元素是游戏(例如rank.soccer),它们本身应该是表。所以,这里是我的代码的精髓Javascript Knockout.js可观察数组中的排序数组,javascript,sorting,knockout.js,Javascript,Sorting,Knockout.js,我按照本教程创建了可排序表 当我有一个数组,其元素对应于一个表的列时,它非常有效。但是,我有一个可观察的array(rank),它的元素是游戏(例如rank.soccer),它们本身应该是表。所以,这里是我的代码的精髓 self.rank = ko.observableArray(); //Then I use publicGet to do an html request and pull json data into the observable array self.sortBy_s
self.rank = ko.observableArray();
//Then I use publicGet to do an html request and pull json data into the observable array
self.sortBy_soccer_teamName = function(){
self.rank().soccer.sort(function(a, b){
if (a.teamName > b.teamName) return 1;
if (a.teamName < b.teamName) return -1;
return 0;
});
};
<table style="width: 100%">
<thead>
<th><a href="#" data-bind="click: sortBy_soccer_placing">Rank</a></th>
<th><a href="#" data-bind="click: sortBy_soccer_teamName">Team</a></th>
<th><a href="#" data-bind="click: sortBy_soccer_matchWins">Match Wins</a></th>
<th><a href="#" data-bind="click: sortBy_soccer_matchLosses">Match Losses</a></th>
<th><a href="#" data-bind="click: sortBy_soccer_winPercent">Win Percent</a></th>
<th><a href="#" data-bind="click: sortBy_soccer_gamesBack">Games Back</a></th>
<tbody data-bind="foreach: rank().soccer">
<tr>
<td data-bind="text: placing"></td>
<td data-bind="text: teamName"></td>
<td data-bind="text: matchWins"></td>
<td data-bind="text: matchLosses"></td>
<td data-bind="text: winPercent"></td>
<td data-bind="text: gamesBack"></td>
</tr>
</tbody>
</thead>
为了生成表,我对每个rank()进行数据绑定。soccer
表显示得很好,但我不能对数据进行排序,排序函数对表没有任何作用,html也没有任何问题。这肯定只是排序函数
所以。人们如何在一个可观察的数组中对列表进行排序
谢谢根据我的理解,排名是一个可观察的方式,足球是排名中每个项目的一个数组。你想把足球分类 在将json数据放入self.rank之前,为每个足球创建observableArray。这样,只要你改变足球的顺序,淘汰赛就会收到变化,并相应地显示结果。你可以尝试以下方法:
self.rank = ko.observableArray();
self.rank().sort(function(l, r)
{
return (l.teamName == r.teamName) ? (l.teamName > r.teamName ? 1 : -1) : (l.teamName > r.teamName ? 1 : -1);
});
您可以提供进行数据绑定的html,或者json的一个示例吗?您可以指定
self.rank
是一个可观察的array,但是您可以使用self.rank().soccer
在sortBy fn中访问它。似乎前后矛盾。您能否发布ObservalArray的结构,可能是一个JSFIDLE(或等效工具)来演示这个问题。是的。我最终不得不把足球、足球和其他所有的比赛变成它们自己的可观察的Aray,以便能够对它们进行分类
self.rank = ko.observableArray();
self.rank().sort(function(l, r)
{
return (l.teamName == r.teamName) ? (l.teamName > r.teamName ? 1 : -1) : (l.teamName > r.teamName ? 1 : -1);
});