2016-06-03 6 views
1

Ich versuche, eine benutzerdefinierte Sortierung mithilfe einer Vergleichsfunktion aus einem Vorlage Helper in Meteor durchzuführen.Ausnahme im Template Helper: Fehler: Match Fehler

Hier ist meine Vorlage Helfer:

Template.move_list.helpers({ 
    assets() { 
    return Assets.find({}, { sort: sortFunction }); 
    } 
}); 

Und hier ist die Vergleichsfunktion:

const sortFunction = function (doc1, doc2) { 
    const barcodes = Session.get('barcodesArray'); 

    if (barcodes.indexOf(doc1.barcode) === -1 || barcodes.indexOf(doc2.barcode) === -1) { 
    return 0; 
    } 

    let last = null; 
    _.each(barcodes, function (barcode) { 
    if (barcode === doc1.barcode) last = doc1.barcode; 
    if (barcode === doc2.barcode) last = doc2.barcode; 
    }); 

    return last === doc1.barcode ? 1 : -1; 
} 

Fehler

Wenn die Seite geladen wird, wird der folgende Fehler zurückgegeben:

Exception in template helper: Error: Match error: Failed Match.OneOf, Match.Maybe or Match.Optional validation

Ich habe einen Haltepunkt in Chrom in die sortFunction, aber die Funktion wurde nie eingegeben und der Haltepunkt nie erreicht.

Natürlich ist der Fehler nicht werfen, wenn ich sort entfernen.

Referenzen

Diese Funktion ist nicht sehr gut dokumentiert ist, ist jedoch hier die relevant part of the docs:

For local collections you can pass a comparator function which receives two document objects, and returns -1 if the first document comes first in order, 1 if the second document comes first, or 0 if neither document comes before the other. This is a Minimongo extension to MongoDB.

Und die commit by mitar die Funktionalität hinzufügen, mit Beispiel-Code aus dem Test:

var sortFunction = function (doc1, doc2) { 
    return doc2.a - doc1.a; 
}; 

c.find({}, {sort: sortFunction})

Kann jemand diesen Fehler verstehen?

+0

Das Problem sollte jetzt behoben werden. – MasterAM

+0

Hattest du die Chance, es auszuprobieren? – MasterAM

Antwort

0

Edit:

Dieses Problem sollte in Meteor> = v1.3.3.1 gelöst werden.

Lokale Sammlungen (d. H. Clientseitige und speicherinterne serverseitige Sammlungen) ermöglichen das Übergeben einer Funktion als sort-Klausel.


Der Fehler kommt aus dem mongo Paket, wo die Spezifikation nicht sort erlaubt eine Funktion zu sein.

@mitar LocalCollection im minimongo Paket geändert. LocalCollection ist Teil des Objekts Mongo.Collection auf dem Client (sein _collection Attribut), aber Abfragen werden immer noch gemäß der ursprünglichen mongo Spezifikation überprüft. Ich glaube, das ist ein Fehler, da die Spezifikation nicht aktualisiert wurde, um die Änderung widerzuspiegeln.

dies zu überwinden (inzwischen) entweder die Funktion haben, ein Unterfeld annehmen, derart, dass der sort Wert ist ein Ziel:

var sortFunction = function (x, y) { 
    return x - y; 
}; 
c.find({}, {sort: {a: sortFunction}}); 

oder c._collection.find() stattdessen verwendet werden, die funktionieren (als soweit ich das beurteilen kann), außer dass keine für die Sammlung definierten Transformationen angewendet werden.

var sortFunction = function (doc1, doc2) { 
    return doc2.a - doc1.a; 
}; 
c._collection.find({}, {sort: sortFunction}); 
Verwandte Themen