在Symfony2中使用Typeahead + Bloodhound和FOSJsRoutingBundle执行查询
Performing a query using Typeahead + Bloodhound and FOSJsRoutingBundle in Symfony2
我试图设置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
的例子,并制作了这个代码:
// 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
元素上输入any,我只会得到过滤后的产品?我不知道%query
是否是正确的值,我应该传递给filter_products
路由以获得过滤值。任何帮助吗?
这是我第一次使用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,并以'WILDCARD'作为你的过滤器。然后告诉bloodhound在url上使用'WILDCARD'作为占位符,它将完全替换为输入的查询。
相关文章:
- 如何将typeahead.js(Bloodhound)添加到jQuery动态创建的字段中
- Bloodhound JS在加载时清除LocalStorage
- Bloodhound的新Typeahead是如何处理错误的
- 使用Typeahead.js/Bloodhound.js在远程和本地源之间切换
- 如何使用Bloodhound让Typeahead处理JSON响应
- 具有多个远程数据源的 TypeAhead/Bloodhound
- 将typeahead.js与bloodhound.md和外部json一起使用
- 如何列出Typeahead.js和/或Bloodhound引擎的对象
- Typeahead/Bloodhound Remote未返回数据
- 推特's typeahead+带有JSON对象的Bloodhound
- 包含Typeahead.js Bloodhound和Browserify会给出空对象{}
- Typeahead.js和Bloodhound.js与c# WebForms的集成
- TypeAhead和Bloodhound只搜索JSON数组中的第一个单词
- 在Symfony2中使用Typeahead + Bloodhound和FOSJsRoutingBundle执行查询
- js Bloodhound忽略了高质量的结果
- 在空查询时返回所有Bloodhound记录
- 推特预先输入的bloodhound代币不起作用
- Bootstrap typeahead,更改bloodhound建议引擎使用的数据源
- Twitter typeahead.js / Bloodhound (v 0.10.2):如何动态更新(本地)源