Frage

Erstens dank der Jungs von DocumentCloud zur Veröffentlichung dieser beiden supernutzigen Werkzeuge.

Hier geht meine Frage (n):

Ich versuche, visulasearch.js in einer backbone.js -App zu verwenden.

In meiner App habe ich eine grundlegende Index.html und eine MyApp.js JavaScript -Datei, die die Hauptanwendung mit Backbone.js enthält

Ich verwende CouchDB als Datenspeicher und kann erfolgreich alle Daten in die Sammlung aufrund machen.
Ich muss die von visualSearch.js angegebene Suchabfrage abrufen und sie verwenden, um eine Sammlung zu filtern.
Ich brauche sicherlich eine Ansicht für die Suchkiste, um ein Ereignis auszulösen, wenn die Eingabetaste getroffen wird, aber ..

  1. Sollte ich die Searchbox extern zu myapp.js in einer zusätzlichen JS -Datei oder meiner Index.html -Seite anferne (wie in der vorgeschlagen VisualSearch Mini.Tutorial)? Oder sollte ich es in der Suchkastenansicht (myapp.js) initialisieren? Diese letztere Lösung scheint zu schwierig zu sein (es war das, was ich versuchte, aber selbst wenn ich erfolgreich bin, ist es zu kompliziert und ich habe die Einfachheit von Bacbone MVC verloren).

  2. Angenommen {name:'Fat DAvid', address:'24, slim st', phone:'0098876534287'}. Sobald ich dies erledigt habe, kann ich in der Sammlung nur die Modelle abrufen, deren Felder mit der angegebenen Zeichenfolge übereinstimmen. Ich verstehe, dass ich eine Karte oder einen Filter machen sollte, aber diese Funktionen scheinen nativ für etwas andere Aufgaben zu dienen.

    a. Ist es wirklich der beste Weg, um Ergebnisse zu filtern? Es berechnet den Client (der die Ergebnisse filtern muss), während eine neue Abfrage (eine Ansicht oder ein Filter) in CouchDB recht einfach ist, und berücksichtigt die geringe Datenmenge und die niedrige Zugangsrate für die Website, nicht so teuer, und nicht so teuer . Wenn Sie jedoch alle Filteraktions-Client-Seite gestalten, ist es viel einfacher, als neue Ansicht (oder List oder Filter) in CouchDB zu erstellen und sie mit dem Backbone.js-Ansicht zu verknüpfen

War es hilfreich?

Lösung

Sie können Ihr Suchfeld für visualSearch.js direkt in Ihrem MyApp.js initialisieren. Stellen Sie einfach sicher, dass Sie einen Hinweis darauf haben, damit Sie die Facetten und Werte später extrahieren können.

Zum Beispiel:

var visualSearch = VS.init({...})
// Returns the unstructured search query
visualSearch.searchBox.value() 
// "country: "South Africa" account: 5-samuel title: "Pentagon Papers""

// Returns an array of Facet model instances
visualSearch.searchQuery.facets()
// [FacetModel<country:"South Africa">, 
//  FacetModel<account:5-samuel>, 
//  FacetModel<title:"Pentagon Papers">]

Wenn Sie diese Modelle in einer Backbone -Sammlung haben, können Sie problemlos einen Filter ausführen:

var facets = visualSearch.searchQuery.models;
_.each(facets, function(facet) {
    switch (facet.get('category')) {
        case 'country':
            CountriesCollection.select(function(country) { 
                return country.get('name') == facet.get('value'); 
            });
        break;
        // etc...
    }
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top