2017-06-02 2 views
1

Ich verstehe nicht - warum in this Beispiel Ich kann diese Tabelle sortieren, wenn die Liste ein beobachtbares Array ist, aber in this Beispiel wo ein Array ist kein beobachtbares Array, aber hat alle Gegenstände als Observables - es tut es nicht.Sortieren einer Liste von Observablen in knockout

Wie kann ich die Sortierung durchführen, wenn ich auch alle Objekte des Arrays als Observables erstellt habe?

Mit dieser Anordnung die Sortierung funktioniert wie erwartet

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

aber mit dieser es nicht

var ListSortModel = function() { 
this.allItems = ko.mapping.fromJS([ 
    {name:"Annabelle"}, 
    {name:"Vertie"}, 
    {name:"Charles"} 
]); 

Antwort

1

Ihre ko.mapping Plugin Schleifen über Ihre inneren Objekte und macht die Eigenschaften observable. Dh:

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

Ein Vergleich wie nun zwei beobachtbaren Fällen vergleicht, die es nicht wirklich kann ... Hier finden Sie die Observablen inneren Werte vergleichen müssen, die Sie sie durch den Aufruf abrufen können: obj.name() .

Also mit der Mapping-Version müssen Sie a.name() < b.name() anstelle von verwenden.

Zusätzliche Anmerkung: Es ist wahrscheinlich besser zu verwenden return a.name().localeCompare(b.name());

Verwandte Themen