【问题标题】:Twitter typeahead 0.1 w/ bloodhound -- can't get prefetch working with URLTwitter typeahead 0.1 w/bloodhound - 无法使用 URL 进行预取
【发布时间】:2014-02-26 00:28:42
【问题描述】:

我在 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"}]

【问题讨论】:

  • 也许您的端点没有返回有效的 JSON。模拟 AJAX 请求,我能够得到一个工作示例:jsfiddle.net/2Cres/5
  • @BrandonBoone 我粘贴了我的 URL 返回的 json。看一看。
  • @BrandonBoone 使用您的链接,我能够诊断出问题。非常感谢。

标签: javascript typeahead.js twitter-typeahead bloodhound


【解决方案1】:

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

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

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

【讨论】:

  • 好收获!我试图实现你的 JSON 并取回我在原始示例中的数字。原来预取使用本地存储来减少到您的网络服务器的流量 (jsfiddle.net/2Cres/25)。所以当你结束测试并发现你的数据是陈旧的时要小心。
  • 我也注意到了这一点,这有点令人沮丧。我开始在 URL 的末尾添加随机数,这可能解释了为什么它会增加到 25 个实例 :)
  • 您可以将预取设置更改为 ttl: 0,这将始终提取新数据集
  • 我也有同样的问题。您可以在预取中发布您的 json 文件、标记器和过滤器的示例吗?我仍然不清楚命名是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多