Pergunta

Eu estou tentando configurar Typeahead + Bloodhound para realizar a pesquisa com sugestões sobre um campo.O código HTML para o campo é como a seguir:

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

Eu uso duas principais funções do Symfony:um para retornar todos os produtos e usar isso como um prefetch e o outro para o filtrado produtos.Esta é a forma como as rotas para que funções se parece com:

 // 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")

Como você pode ver o primeiro não recebemos quaisquer parâmetros, pois ele retorna todos os produtos como JSON valores, mas o segundo leva {filter} como um argumento para executar o LIKE e retorna apenas o filtrado produtos.

Agora eu não sei entender como Cão de obras para que eu leia o docs e também para ler o typeahead docs e dar um exemplo de aqui o Remote um e fez este código:

// 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()
});

É isso mesmo?Quero dizer, quando a página carrega, eu vou conseguir todos os produtos prefetched, mas se eu digitar qualquer .typeahead elemento vou pegar só o filtrado queridos?Eu não sei se %query é o valor que eu deveria passar para filter_products rota a fim de obter os valores filtrados.Qualquer ajuda?

Esta é a primeira vez que eu uso Typeahead + Cão de caça

Foi útil?

Solução

Substituir remote: Routing.generate('filter_products', { 'filter' : '%query' }) com eg

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

Que irá gerar uma geral url com o RoutingBundle primeiro e leva 'CURINGA' como o filtro.Que dizer bloodhound para usar o 'CURINGA' no url como um espaço reservado e será perfecly substituí-lo com a inserção de uma consulta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top