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 を使用するのはこれが初めてです