Pregunta

En primer lugar, gracias a los chicos de Documentcloud por lanzar esas dos herramientas súper utilizadas.

Aquí va mi pregunta (s):

Estoy tratando de usar Visulasearch.js en una aplicación Backbone.js.

En mi aplicación tengo un archivo básico index.html y un archivo myapp.js javascript que contiene la aplicación principal realizada con backbone.js

Utilizo CouchDB como almacenamiento de datos, y puedo recuperar con éxito de una manera tranquila todos los datos que se colocarán en la recopilación.
Debo recuperar la consulta de búsqueda dada por VisualSearch.js y usarla para filtrar una colección.
Seguramente necesito una vista para el Searchbox, para activar un evento cuando se presiona Enter, pero ...

  1. ¿Debo inicializar el cuadro de búsqueda externamente a myapp.js, dentro de un archivo JS adicional o mi página index.html (como se sugiere en el VisualSearch mini.tutorial)? ¿O debería inicializarlo dentro de la vista Searchbox (myApp.js)? Esta última solución parece ser demasiado complicada (era lo que estaba tratando de hacer, pero incluso cuando tengo éxito, es demasiado complicado y perdí la simplicidad de Bacbone MVC).

  2. Digamos que logré recuperar la cadena de búsqueda como un objeto JSON como {name:'Fat DAvid', address:'24, slim st', phone:'0098876534287'}. Una vez hecho eso, qué función puedo usar para recuperar, en la colección, solo los modelos cuyos campos coinciden con la cadena dada. Entiendo que debería hacer un mapa o un filtro, pero esa función parece servir de forma nativa para tareas ligeramente diferentes.

    una. ¿Es realmente la mejor manera de filtrar los resultados? Cobra al cliente (que debe filtrar los resultados), mientras hace una nueva consulta (una vista o un filtro) a CouchDB sería bastante simple y, considerado la pequeña cantidad de datos y la baja tasa de acceso al sitio, no tan caro. . Sin embargo, haciendo toda la acción de filtrado del lado del cliente, es mucho más simple que hacer una nueva vista (o lista o filtros) en CouchDB y vincularlo en la vista Backbone.js

¿Fue útil?

Solución

Puede inicializar su cuadro de búsqueda VisualSearch.js directamente en su myapp.js. Solo asegúrese de mantener una referencia para que pueda extraer las facetas y valores más tarde.

Por ejemplo:

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 tiene estos modelos en una colección de columna vertebral, puede realizar fácilmente un filtro:

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...
    }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top