如何使用最新的typeahead.js库呈现JSON响应

whi*_*lar 8 javascript jquery twitter-bootstrap bootstrap-typeahead typeahead.js

我的应用程序中有一个搜索框,用户可以在其中搜索存储在数据库中的患者详细信息.他们会输入患者的姓名,服务器将回复JSON响应并提供所有详细信息.为了方便这样的功能,我使用的是最新版本的typeahead.js.

这是我的javascript代码:

$("#search-box").typeahead({
    remote: 'searchPatient.do?q=%QUERY'
});
Run Code Online (Sandbox Code Playgroud)

此代码为我提供了以下JSON响应:

[
 {
  "id":1,
  "surname":"Daniel",
  "forename":"JOHN",
  "address":
            {
              "id":23,
              "houseNameOrNumber":"35",
              "addressDetail":"Roman House",
              "postCode":"NE1 2JS"
            },
  "gender":"M",
  "age":27,
  "dateOfBirth":"25/08/1985"
 }
]
Run Code Online (Sandbox Code Playgroud)

当typeahead库尝试呈现此响应时,我总是在下拉列表中看到未定义.我想在自动建议下拉列表中显示此响应的所有字段.如果有人可以指导我这样做,我将不胜感激.

我想在下拉列表中显示这样的记录:

John Daniel (M, 27)
35 Roman House, NE1 2JS
25/08/1985
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Hie*_*yen 7

您当前的代码太简单无法实现,您需要使用templateremote实现:

$('#search-box').typeahead([{                              
    name: 'Search',
    valueKey: 'forename',
    remote: {
        url: 'searchPatient.do?q=%QUERY',
        filter: function (parsedResponse) {
            // parsedResponse is the array returned from your backend
            console.log(parsedResponse);

            // do whatever processing you need here
            return parsedResponse;
        }
    },                                             
    template: [                                                                 
        '<p class="name">{{forename}} {{surname}} ({{gender}} {{age}})</p>',
        '<p class="dob">{{dateOfBirth}}</p>'
    ].join(''),                                                                 
    engine: Hogan // download and include http://twitter.github.io/hogan.js/                                                               
}]);
Run Code Online (Sandbox Code Playgroud)

只是为了给你一个基本的想法,希望它有所帮助.

  • 我找到了答案:你只获得1个结果的原因是因为json中的数据对象必须包含:tokens和value字段.我有完全相同的问题,一旦你纠正你的Json数据就没问题了. (2认同)