Symfony2のTypeahead + BloodhoundとFosjSroutingBundleを使用してクエリを実行する
-
02-01-2020 - |
質問
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つの主な機能を使用します。その関数のルートがどのように見えるかです。
// 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番目のものはprefetch
を実行するための引数として{filter}
を取得し、フィルタ処理された製品のみを返します。
今、私は docs およびTypeAheadの場合、 DOCS と Here LIKE
1このコード:
// 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()
});
.
それは右ですか?ページロードがいつプリフェッチされているのかが、Remote
要素を入力した場合は、フィルタリングされたものだけが入手できます。 .typeahead
が正しい値であるかどうかはわかりません。フィルタリングされた値を取得するために%query
ルートに渡す必要があります。
これは私がTypeAhead + Bloodhound
を初めて使用するのです。解決
remote: Routing.generate('filter_products', { 'filter' : '%query' })
をe.g。
var url = Routing.generate('filter_products', {filter: 'WILDCARD'});
// ... some code
remote: {
url: url,
wildcard: 'WILDCARD'
}
.
最初にroutingbundleを持つ一般的なURLを生成し、フィルタとして「ワイルドカード」を取ります。PlaceHolderとしてURLで「ワイルドカード」を使用するようにBloodhoundに指示していて、それは入力されたクエリと完全に置き換えます。
所属していません StackOverflow