symfony2.7,bloodhound,typeahead不显示自动完成

时间:2015-11-16 10:42:59

标签: symfony typeahead.js bloodhound

我正在尝试使用带有symfony 2.7的typeahead来使用LIKE进行数据库搜索。我已经阅读了typeahead的文档,并根据他们网站上的示例,我提供了一个小例子,看看它是如何工作的。由于我在执行搜索的表中有大约1300个条目,因此我生成了一个包含所有性能条目的json文件。 问题是,typeahead没有显示来自远程或预取的任何信息,我不明白为什么它不起作用,因为我没有对示例中的原始代码进行太多更改。目前生成的结果包含来自示例页面的虚拟数据,因为我认为从远程返回的结果有问题。也许我错过了什么,我看不到解决方案。 我检查了控制台,我没有收到任何错误,在打字之前加载了bloodhound,两者都被正确加载并且js文件在它们之后加载并显示内容。

Javascript文件:

    var url = Routing.generate('ajax_search', {name: 'query'});
// Trigger typeahead + bloodhound
var products = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: '/json/result.json',
     remote: {
      url: url,
      wildcard: 'query'
    }
});

products.initialize();

$('#products_forms .typeahead').typeahead({
    name: 'product',
    displayKey: 'value',
    source: products.ttAdapter()
});

html测试文件

{% extends '::base.html.twig' %}
{% block body %}
<div class="col-sm-10" id="product">
    <input type="text" placeholder="Product" id="product" name="product" class="form-control typeahead">
</div>
{% endblock %}

从php生成的虚拟文件

cat result.json

            {"stateCode": "CA", "stateName": "California"},
            {"stateCode": "AZ", "stateName": "Arizona"},
            {"stateCode": "NY", "stateName": "New York"},
            {"stateCode": "NV", "stateName": "Nevada"},
            {"stateCode": "OH", "stateName": "Ohio"}

1 个答案:

答案 0 :(得分:0)

似乎是这样的:

的javascript:

$(document).ready(function() {
    var url = Routing.generate('ajax_search', {name: 'WILDCARD'});
    // Trigger typeahead + bloodhound
    var products = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        identify: function(obj) { return obj.team; },
        prefetch: 'json/result.json',
        remote: {
          url: url,
          wildcard: 'WILDCARD',
        }
    });

    products.initialize();

    $('#products_forms .typeahead').typeahead({
      minLength: 3,
      highlight: true
    },
    {
      name: 'product',
      display: 'team',
      source: products.ttAdapter()
    });
});