簡體   English   中英

在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元素上輸入任何內容,我將只獲得過濾的那些? 我不知道%query是否是正確的值,我應該傳遞給filter_products路由以獲取過濾的值。 有幫助嗎?

這是我第一次使用Typeahead + Bloodhound

用例如。替換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'作為您的過濾器。 告訴bloodhound在url上使用'WILDCARD'作為占位符,它將完全用輸入的查詢替換它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM