javascript - 对 knockout 中的可观察值列表进行排序

标签 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"}
]);

最佳答案

您的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()); 可能更好

关于javascript - 对 knockout 中的可观察值列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331264/

相关文章:

javascript - 单击后加载 html 时如何动态设置输入的值?

javascript - 为什么我的网站可以使用 Safari,而不是 FireFox 或 IE?

php - 动态删除未知级别的数组(不使用 eval)

sorting - Flutter类型 '_InternalLinkedHashMap<String, dynamic>'不是 'Comparable<dynamic>'类型的子类型

php - 使用文本字段通过后端管理对前端菜单进行排序

javascript - 正确加载多个 webpack 包

javascript - jQuery 下拉 Bootstrap 不适用于某些情况

arrays - 在 Ruby 中创建空子数组的数组

java - Java中的多线程同步

sorting - 使用 Julia 将项目插入到排序列表中(有和没有重复)