Javascript 在淘汰中对可观察对象列表进行排序
我不明白——为什么在示例中,当列表是一个可观察数组时,我可以对这个表进行排序,但在示例中,数组不是一个可观察数组,但所有项都是可观察的——它没有 当我将所有数组的项都设置为可观察项时,如何进行排序 使用此数组,排序工作正常Javascript 在淘汰中对可观察对象列表进行排序,javascript,arrays,sorting,knockout.js,Javascript,Arrays,Sorting,Knockout.js,我不明白——为什么在示例中,当列表是一个可观察数组时,我可以对这个表进行排序,但在示例中,数组不是一个可观察数组,但所有项都是可观察的——它没有 当我将所有数组的项都设置为可观察项时,如何进行排序 使用此数组,排序工作正常 this.allItems = ko.observableArray([ {name:"Annabelle"}, {name:"Vertie"}, {name:"Charles"} ]); 但有了这一点,情况就不一样了 var ListSortMod
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
插件在你的内部对象上循环,并使属性可见。即:
this.allItems = ko.observableArray([
{ name: ko.observable("Annabelle") },
{ name: ko.observable("Vertie") },
{ name: ko.observable("Charles") }
]);
像A.name
这样的比较现在可以比较两个可观察的实例,但实际上无法做到这一点。。。您需要比较可观察对象的内部值,可以通过调用它们来检索:obj.name()
因此,对于映射版本,您需要使用a.name()
而不是a.name
附加说明:最好使用返回a.name().localeCompare(b.name())代码>