有人可以帮我解决这个问题吗?我有一组 PDF 文档,我希望能够搜索它们。 我尝试使用 matteodem:easy-search 和meteorhacks:search-source,但它们都只处理 Meteor Collections 而不是 FS。我可以让这两个包都使用常规文本。我只想根据 FS 集合中的名称字段返回搜索查询的结果。
任何帮助将不胜感激!
最佳答案
- 如果您还没有reactive-var 包,请安装reactive-dict 包(如果您还没有安装reactive-dict 包)
- 创建 react 变量(也可以是
Session
变量)searchString
- 将您的项目显示封装在
{{#each selectedFiles}}
中,其中chosenFiles
是您的助手名称。 创建一个帮助器
chosenFiles
,您可以在其中调用搜索函数并为其提供文件集合中的光标。"chosenFiles": function() { return filterFiles(yourFileCollection.find()); }
创建
filterFiles
函数,基本上,您可以返回searchString
并使用它来过滤结果,如果您的searchString< 则返回所有内容
为空。这是一个使用reactive-dict的例子:var pageSession = new ReactiveDict(); filterFiles= function(cursor) { if(!cursor) { return []; } var searchString = pageSession.get("SearchString"); var raw = cursor.fetch(); // filter var filtered = []; if(!searchString || searchString == "") { filtered = raw; } else { searchString = searchString.replace(".", "\\."); var regEx = new RegExp(searchString, "i"); var searchFields = ["original.name", "original.type"]; filtered = _.filter(raw, function(item) { var match = false; _.each(searchFields, function(field) { var value = (getPropertyValue(field, item) || "") + ""; match = match || (value && value.match(regEx)); if(match) { return false; } }) return match; }); } return filtered; };
例如,将
searchString
定义附加到您的keyUp
事件,以便获得响应式搜索。"keyup .yourTextBox": function(e, t) { var searchString = e.currentTarget.value; switch (e.which) { //pressing esc clear the textbox case 27: e.currentTarget.value = ""; pageSession.set("SearchString", ""); break; default: pageSession.set("SearchString", searchString); }
我不是 100% 确定“original.name”是访问名称字段的正确方法,因为我不使用 collectionFS,但似乎是,according to the doc
关于javascript - 如何搜索 FS 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946133/