2016-11-17 2 views
0

jetzt verwenden Ich habe etwas ähnliches wiewie die automatische Vervollständigung mit Ganzkörper-Suche in Apostroph cms

var cursor = self.apos.docs.find(req, { highSearchText: {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') } }) 

cursor.queryToFilters({ highSearchText: {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') } }, 'public') 

.perPage(self.perPage); 

Und ich versuche, einen Weg, um herauszufinden, autocomplete

Antwort

1

zu implementieren Wie Sie wissen, ich bin der Leiter des Apostrophe-Teams in der P'unk Avenue.

Sie versuchen, viel, viel, viel zu hart (:

Namen Geben Sie Ihr Suchfeld "Autovervollständigen" in Form

dies dann tun.

var cursor = self.apos.docs.find(req, {}) 
    .queryToFilters(req.query, 'public') 
    .perPage(self.perPage); 
}; 

Wirklich .. Der ganze Zweck von queryToFilters ist im Grunde nur dies zu tun (nicht ganz, siehe unten für Sicherheitshinweis, was es wirklich tut):

// DON'T DO THIS, JUST GIVES YOU AN IDEA OF WHAT'S GOING ON 
_.each(req.query, function(val, key) { 
    cursor[key](val); 
}); 

Es ruft Cursor-Methoden mit dem gleichen Namen wie die Eigenschaften von req.query (na ja, fast).

Natürlich wäre das unsicher, aber queryToFilters stellt speziell sicher, dass die betreffenden Methoden Cursor-Filter sind, die als safeFor: 'public' markiert sind und ihre Sanitizers zu laufen.

autocomplete ist so ein Cursor-Filter, also ... Boom, wir sind fertig.

Auch ich sehe Sie arbeiten mit self.apos.docs.find direkt. Ich nehme an, Sie tun das, weil Sie möchten, dass alle Arten von Dokumenten von der Abfrage zurückkommen, in welchem ​​Fall Sie das Richtige tun.

Falls es nicht klar ist, wenn Sie noch nicht mit einer Abfragezeichenfolge an erster Stelle arbeiten, können Sie nur autocomplete rufen direkt mit was auch immer es ist, Sie haben zu tun:

cursor.autocomplete('startofaword'); 

Hope this ist hilfreich!

Verwandte Themen