【问题标题】:Sorting a list of observables in knockout在淘汰赛中对可观察对象列表进行排序
【发布时间】:2017-11-04 00:04:14
【问题描述】:

我不明白 - 为什么在 this 示例中,当列表是可观察数组时我可以对该表进行排序,但在 this 示例中,数组不是可观察数组,但所有项目都是可观察的- 没有。

当我还将数组的所有项目都设为可观察对象时,如何进行排序?

使用此数组,排序工作正常

this.allItems = ko.observableArray([
    {name:"Annabelle"},
    {name:"Vertie"},
    {name:"Charles"}
]);

但它没有

var ListSortModel = function () {
this.allItems = ko.mapping.fromJS([
    {name:"Annabelle"},
    {name:"Vertie"},
    {name:"Charles"}
]);

【问题讨论】:

    标签: javascript arrays sorting knockout.js


    【解决方案1】:

    您的ko.mapping 插件循环遍历您的内部对象并生成属性observable。即:

    this.allItems = ko.observableArray([
        { name: ko.observable("Annabelle") },
        { name: ko.observable("Vertie") },
        { name: ko.observable("Charles") }
    ]);
    

    a.name < b.name 这样的比较现在比较两个可观察的实例,但它实际上无法做到……您需要比较可观察的内部值,您可以通过调用它们来检索它们:obj.name()

    因此,对于映射版本,您需要使用 a.name() < b.name() 而不是 a.name < b.name

    补充说明:使用return a.name().localeCompare(b.name());可能会更好

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2014-08-08
      • 2017-09-19
      • 2012-07-07
      • 1970-01-01
      • 2023-04-06
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多