Выполнение запроса с использованием Typeahead + Bloodhound и FOSJsRoutingBundle в Symfony2

StackOverflow https://stackoverflow.com//questions/25083391

Вопрос

Я пытаюсь настроить Typeahead + Bloodhound для поиска по предложениям в поле.HTML-код поля следующий:

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

Я использую две основные функции Symfony:один для возврата всех продуктов и использования его в качестве prefetch а другой для отфильтрованных продуктов.Вот как выглядят маршруты для этих функций:

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

Как вы можете видеть, первый не получил никаких параметров, поскольку возвращает все продукты в виде значений JSON, а второй принимает {filter} в качестве аргумента для выполнения LIKE и возвращает только отфильтрованные продукты.

Теперь я вообще не понимаю, как работает Bloodhound, поэтому я прочитал документы а также для ввода текста вперед прочтите документы и возьми пример с здесь тот Remote one и сделал этот код:

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

Это правильно?Я имею в виду, что при загрузке страницы я получу все продукты предварительно загруженными, но если я наберу их на .typeahead element Я получу только отфильтрованные?Я не знаю, если %query это правильное значение, которое я должен передать filter_products маршрут, чтобы получить отфильтрованные значения.Любая помощь?

Впервые использую Typeahead + Bloodhound.

Это было полезно?

Решение

Заменять remote: Routing.generate('filter_products', { 'filter' : '%query' }) например,

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

Сначала будет сгенерирован общий URL-адрес с помощью RoutingBundle, а в качестве фильтра будет использоваться WILDCARD.Затем скажите Bloodhound использовать «WILDCARD» в URL-адресе в качестве заполнителя, и он идеально заменит его введенным запросом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top