Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.js可观察数组中的排序数组_Javascript_Sorting_Knockout.js - Fatal编程技术网

Javascript Knockout.js可观察数组中的排序数组

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

我按照本教程创建了可排序表

当我有一个数组,其元素对应于一个表的列时,它非常有效。但是,我有一个可观察的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_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);
});