1

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 の 2 つの主な関数を使用します。1 つはすべての製品を返し、これを a として使用し、もう 1 つ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 値として返すため、パラメーターを取得しませんでしたが、2 番目のものは{filter}実行の引数として取りLIKE、フィルター処理された製品のみを返します。

今、ブラッドハウンドの仕組みがまったくわからないので、ドキュメントを読み、タイプアヘッドのためにドキュメントを読み、ここから例を挙げて、Remoteこのコードを作成しました:

// 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要素に何か入力すると、フィルタリングされたものだけが取得されますか? フィルタリングされた値を取得するためにルートに%query渡す必要がある正しい値であるかどうかはわかりません。filter_products何か助けはありますか?

Typeahead + Bloodhound を使用するのはこれが初めてです

4

1 に答える 1

3

remote: Routing.generate('filter_products', { 'filter' : '%query' })例に置き換えます

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

これにより、最初に RoutingBundle を使用して一般的な URL が生成され、フィルターとして「WILDCARD」が使用されます。プレースホルダーとして URL で「WILDCARD」を使用するようにブラッドハウンドに指示すると、入力されたクエリで完全に置き換えられます。

于 2014-09-24T10:50:59.960 に答える