knockout.js 为什么CloudKit JS“sortBy”在Safari上返回不同的顺序?

nc1teljy  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(123)

我试图在网页上Map我的应用程序的高分排行榜。遵循旧的raywenderlich tutorial,我使用CloudKit JS和Knockout来完成这个任务。当然,我想按分数从高到低排序。
本教程中的示例代码使用:

var query = { recordType: 'CD_FinalScore', sortBy: [{ fieldName: 'CD_score'}] };

(Of当然,我在示例中插入了recordType和fieldName。)这并没有给予我想要的结果,所以我在查询获取的记录上添加了一个排序方法:

self.items(records.sort(function(a, b){return b - a}));

这给了我在Firefox上想要的结果,但在Safari上却没有(顺序是相反的)。我的直觉告诉我,我需要关注查询签名。有人能告诉我我做错了什么或做得不完整吗?谢谢!完整的Knockout视图模型代码可供参考,在这里:

function LeaderboardViewModel() {
    var self = this;
    var container = CloudKit.getDefaultContainer();
    var publicDB = container.publicCloudDatabase;
    self.items = ko.observableArray();
    self.fields = ko.observable('');
    self.fields.CD_score = ko.observable('');
    self.fields.CD_userName = ko.observable('');
    self.fields.CD_submitDate = ko.observable('');

    self.fetchRecords = function() {
      var query = { recordType: 'CD_FinalScore', sortBy: { fieldName: 'CD_score' } };

      // Execute the query.
      return publicDB.performQuery(query).then(function(response) {
        if(response.hasErrors) {
          console.error("response errors: " + response.errors[0]);
          return;
        }
       var records = response.records;
        var numberOfRecords = records.length;
        if (numberOfRecords === 0) {
          console.error('No matching items');
          return;
        }
        //self.items(records); // this is per the original, tutorial
        self.items(records.sort(function(a, b){return b - a}));
      });
    };

      container.setUpAuth().then(function(userInfo) {
      console.log("setUpAuth");
      self.fetchRecords(); 
      });
  }
  ko.applyBindings(new LeaderboardViewModel()); 

});
6pp0gazn

6pp0gazn1#

根据user3297291的建议(特别是在提供的链接中),我将排序更改为以下内容:

self.items(records.sort(function(a, b) {
          return parseFloat(b.fields.CD_score.value) - parseFloat(a.fields.CD_score.value);
        }));

这似乎是在两个浏览器(Firefox和Safari)工作。

相关问题