在淘汰赛中对可观察者列表进行排序

时间:2017-06-02 14:24:04

标签: javascript arrays sorting knockout.js

我不明白 - 为什么在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"}
]);

1 个答案:

答案 0 :(得分:1)

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

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

a.name < b.name之类的比较现在比较了两个可观察到的实例,它们确实可以做到......你需要比较观察到的情况&#39;内部值,您可以通过调用它们来检索它们:obj.name()

因此,对于地图版本,您需要使用a.name() < b.name()代替a.name < b.name

附加说明:使用return a.name().localeCompare(b.name());

可能更好