0

我在 JS 中有这段代码,效果很好。

  var values = new Bloodhound({
      datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.num); },
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      remote: '/url/that/returns/json'
   });

但是,由于我只需要一次,我将其更改为预取,如下所示:

  var values = new Bloodhound({
      datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.num); },
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      prefetch: {url: '/url/that/returns/json'}
   });

这会在 typeahead.js 中导致错误(“TypeError: a is undefined”)。我需要更改什么才能使此功能正常工作?

编辑:如果我在浏览器中访问 URL,则返回的 json 是:

[{"name":"MyName","id":"100","code":"CODE"}]

4

1 回答 1

2

这是因为我的 datumTokenizer 正在寻找一个名为 num 的字段:

... return Bloodhound.tokenizers.whitespace(d.num)

但是我的 JSON 中没有这样的字段。我不知道为什么这适用于远程,但它在预取中不起作用。然后修复是用 d.name 替换 d.num。

于 2014-02-26T01:17:43.350 回答