Question

D'abord, grâce aux gars de DocumentCloud pour libérer ces deux outils super-utile.

Voici ma question va (s):

Je suis en train d'utiliser visulasearch.js dans une application de Backbone.js.

Dans mon application, j'ai un index.html de base et un fichier javascript myapp.js Wich contient l'application principale effectuée Backbone.js

J'utilise CouchDB comme le stockage de données, et je peux récupérer avec succès d'une manière reposante toutes les données à mettre dans la collection.
Je dois récupérer la requête de recherche par visualsearch.js et de l'utiliser pour filtrer une collection.
Je dois sûrement une vue pour le searchbox, pour déclencher un événement lorsque la touche enter reste frappé, mais ..

  1. Devrais-je initialze à l'extérieur du searchbox myapp.js, dans un fichier js supplémentaire ou ma page index.html (comme le suggère le visualsearch mini.tutorial )? Ou devrais-je initialiser dans la vue searchbox (de myapp.js)? Cette dernière solution semble être trop difficile (il était ce que je voulais faire, mais même quand je réussis, c'est trop compliqué et j'ai perdu la simplicité de bacbone mvc).

  2. Disons que je réussis à récupérer la chaîne de recherche comme un objet JSON comme {name:'Fat DAvid', address:'24, slim st', phone:'0098876534287'}. Une fois fait, quelle fonction puis-je utiliser pour récupérer, dans la collection, seuls les modèles dont les champs correspondent à la chaîne donnée. Je comprends que je devrais faire une carte ou un filtre, mais les fonctions semble servir nativement pour des tâches légèrement différentes.

    a. est-ce vraiment la meilleure façon de filtrer les résultats? Il charge le client (qui doit filtrer les résultats), tout en faisant une nouvelle requête (une vue ou un filtre) à CouchDB serait tout à fait simple et, considéré comme la faible quantité de données et le faible taux d'accès au site, pas si cher . Cependant, ce qui rend l'action de filtrage côté client, il est beaucoup plus simple que de faire une nouvelle vue (ou d'une liste ou des filtres) dans CouchDB et reliant les Backbone.js les voir

Était-ce utile?

La solution

Vous pouvez initialiser votre VisualSearch.js boîte de recherche directement dans vos myapp.js. Assurez-vous de garder une référence à ce que vous pouvez ensuite extraire les facettes et les valeurs plus tard.

Par exemple:

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">]

Si vous avez ces modèles dans une collection Backbone, vous pouvez facilement effectuer un filtre:

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...
    }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top