Domanda

Sto cercando di impostare Typeahead + Bloodhound per eseguire la ricerca con suggerimenti su un campo. Il codice HTML per il campo è il seguente:

<div class="col-sm-10" id="products_forms">
    <input type="text" placeholder="Producto" id="ProductoForm_0_product_id" name="ProductoForm[0][product_id]" class="form-control typeahead">
</div>
.

Io uso due funzioni principali da Symfony: una per restituire tutti i prodotti e utilizzarlo come prefetch e l'altro per i prodotti filtrati. Questo è come appare i percorsi per quelle funzioni:

 // the one I use as prefetch parameter in bloodhound
 * @Route("/get_products", name="all_products")

 // the one I use as remote
 * @Route("/get_products/{filter}", name="filter_products")
.

Come puoi vedere il primo non ha ottenuto alcun parametro poiché restituisce tutti i prodotti come valori JSON, ma il secondo richiede {filter} come argomento per eseguire il LIKE e restituisce solo i prodotti filtrati.

Ora non so capire affatto come funziona Bloodhound, quindi ho letto il Documenti e anche per Typeahead Leggi il Documenti e fare un esempio da qui il Remote one e realizzato Questo codice:

// Trigger typeahead + bloodhound
var products = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: Routing.generate('all_products'),
    remote: Routing.generate('filter_products', { 'filter' : '%query' })
});

products.initialize();
$('#products_forms .typeahead').typeahead(null, {
    name: 'products',
    displayKey: 'value',
    source: products.ttAdapter()
});
.

è giusto? Voglio dire quando i carichi della pagina riceverò tutti i prodotti prefettati ma se digito qualsiasi elemento .typeahead otterrò solo quelli filtrati? Non so se %query è il valore giusto che dovrei passare alla rotta filter_products per ottenere i valori filtrati. Qualsiasi aiuto?

Questa è la prima volta che uso Typeahead + Bloodhound

È stato utile?

Soluzione

Sostituire remote: Routing.generate('filter_products', { 'filter' : '%query' }) con E.G.

var url = Routing.generate('filter_products', {filter: 'WILDCARD'});
// ... some code
remote: {
            url: url,
            wildcard: 'WILDCARD'
        }
.

che genererà un URL generale con il routingbundle prima e prende il "Wildcard" come filtro.Di dire a Bloodhound a utilizzare 'Wildcard' sull'URL come segnaposto e lo sostituirà perfettamente con la query inserita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top