有人可以帮我解决这个问题吗?我有一组PDF文档,我希望能够搜索。 我尝试过使用matteodem:easy-search和meteorhacks:search-source,但它们都只处理Meteor Collections而不是FS。我可以让这两个包使用常规文本。我只想根据FS Collection中的名称字段返回搜索查询的结果。
非常感谢任何帮助!
答案 0 :(得分:2)
Session
变量)searchString
{{#each chosenFiles}}
中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”是访问name字段的正确方法,因为我不使用collectionFS,但似乎是according to the doc