Сортировка списка наблюдаемых в нокауте

1

Я не понимаю, почему в этом примере я могу сортировать эту таблицу, когда список является наблюдаемым массивом, но в этом примере, когда массив не является наблюдаемым массивом, но имеет все элементы в качестве наблюдаемых - это не так.

Как я могу выполнить сортировку, когда я также сделал все элементы массива в качестве наблюдаемых?

С помощью этого массива сортировка работает так, как ожидалось

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

но с этим он не

var ListSortModel = function () {
this.allItems = ko.mapping.fromJS([
    {name:"Annabelle"},
    {name:"Vertie"},
    {name:"Charles"}
]);
Теги:
arrays
sorting
knockout.js

1 ответ

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());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню