我正在尝试设置 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 的两个主要功能:一个用于返回所有产品并将其用作 a 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
并制作了以下代码:
// 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