Я не понимаю, почему в этом примере я могу сортировать эту таблицу, когда список является наблюдаемым массивом, но в этом примере, когда массив не является наблюдаемым массивом, но имеет все элементы в качестве наблюдаемых - это не так.
Как я могу выполнить сортировку, когда я также сделал все элементы массива в качестве наблюдаемых?
С помощью этого массива сортировка работает так, как ожидалось
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());