typeahead.js 没有从本地获取数据

Posted

技术标签:

【中文标题】typeahead.js 没有从本地获取数据【英文标题】:typeahead.js does not get data from local 【发布时间】:2021-04-13 05:36:42 【问题描述】:

首先,这是一个新手问题:) 很抱歉打扰你...

我已设法从 Firebase Firestore 获取数据,并将该数据放入变量中。

var db = firebase.firestore();
  let contentJSON = [];
db.collection("blog-posts").get().then(function(querySnapshot) 
    querySnapshot.forEach(function(doc) 
var listTemp = 
    "category": doc.data().category,
    "content": doc.data().content,
    "date": doc.data().date,
    "slug": doc.data().slug,
    "title": doc.data().title
  ;
contentJSON.push(listTemp)
    );
);

然后我用这个本地数据创建新的 Bloodhund 实例。

var blogPosts = new Bloodhound(
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('content'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  local: contentJSON,
  );

当我搜索此设置时,什么都没有出现。 我尝试使用 Prefetch 方法使用外部 JSON 运行它并且它有效,但是,我需要使用本地数据运行它。我认为本地数据变量的结构存在问题。你能帮我看看吗?

【问题讨论】:

【参考方案1】:

这可能是一个 AJAX 问题,可以通过 promise 和 async/await 来解决。

第一段代码必须解析.then()你可以运行第二段代码。否则,firebase 代码会在 Bloodhound 之后完成,并且必须在此之前完成。

如果你将 firebase 代码放入这样的函数中

// (1) add async here
async getBlogPosts() 
  var db = firebase.firestore();
  // (2) add return here
  return db.collection("blog-posts").get().then(function(querySnapshot) 
    querySnapshot.forEach(function(doc) 
    // (3) move variable in here
    let contentJSON = [];
    var listTemp = 
    "category": doc.data().category,
    "content": doc.data().content,
    "date": doc.data().date,
    "slug": doc.data().slug,
    "title": doc.data().title
    ;
    contentJSON.push(listTemp)
    // (4) return here
    return contentJSON
    );
);

然后在前端代码中使用 await 调用它

// (5) the async await will make sure this function happens before we proceed
var contentJSON = await getBlogPosts()
var blogPosts = new Bloodhound(
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('content'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  local: contentJSON,
  );

【讨论】:

感谢您的回答。它说代码中有错误。 Uncaught SyntaxError: Unexpected identifier(First ) 你能发布完整的错误吗?你是否在你的应用中包含了 firestore 包?

以上是关于typeahead.js 没有从本地获取数据的主要内容,如果未能解决你的问题,请参考以下文章

添加一些 html 元素后,typeahead 不会从表中获取数据

typeahead.js 获取选定的数据

使用 Django 通过远程数据提高 Twitter 的 typeahead.js 性能

Twitter Typeahead.js - 选择时删除数据

Typeahead.js 不显示下拉菜单

有没有办法关闭typeahead.js的下拉菜单?