使用文本框过滤和搜索

时间:2015-06-20 13:49:44

标签: meteor meteor-helper

这个问题是对My Previous Question on Filtering DropdownList

的跟进

我正在添加一个额外的功能,为此我想使用文本框过滤值。这是过滤器的代码

var filterAndLimitResults = function (cursor) {

if (!cursor) {
    return [];
}

var raw = cursor.fetch();
var currentSearchTitle = searchTitle.get();

if(!(!currentSearchTitle || currentSearchTitle == "")) {
      filtered = _.filter(filtered, function (item) {
              return item.title === currentSearchTitle ;
              console.log(item.title === currentSearchTitle);
      });
    }
var currentLimit =limit.get();
//enforce the limit
if (currentLimit ) {
    filtered = _.first(filtered, currentLimit );
}
return filtered;
};

这是我在搜索文本框中执行的keyup事件

"keyup #search-title":function(e,t){
     if(e.which === 27){
       searchTitle.set("");
     }
     else {
       var text = $(e.target.val);
       searchTitle.set(text)
       console.log(searchTitle.set(text));
     }
   }

有了这个,我能够在console的每个按键上返回总集合对象,但它不会过滤列表中的值,它会从UI中消除所有列表。请帮忙

1 个答案:

答案 0 :(得分:1)

你几乎是对的。你的keyUp事件没问题,但你也可以避免像这样使用jQuery:

"keyup .textInput": function(e, t) {
    var searchString = e.currentTarget.value;
    switch (e.which) {
        case 27:
        e.currentTarget.value = "";
        searchTitle.set("");
        break;
        default:
        searchTitle.set(searchString);
    }
}

请注意,我使用了一个开关,以防您想要为特定搜索添加快捷方式,例如cmd + maj + c仅搜索城市(可能有点过分)

关于搜索功能,我假设您要在当前下拉过滤中搜索项目的标题。 然后,您需要添加额外的步骤来执行此操作。您还需要在其他过滤器之前设置它。请参阅下面的示例,在var filtered = [];之后插入它:

var filtered = [];
var currentSearchTitle = searchTitle.get();
if(!currentSearchTitle || currentSearchTitle == "") {
    filtered = raw;
} else {
    currentSearchTitle = currentSearchTitle .replace(".", "\\.");//for regex
    var regEx = new RegExp(currentSearchTitle , "i");

    filtered = _.filter(raw, function(item) {
        return (item && item.title && item.title.match(regEx));
    });
}
// your other filtering tasks
return filtered;

另外,花点时间了解代码的作用,不能只是复制粘贴它。

此代码受到meteorkitchen作者@Perak的工作的强烈启发。我对它进行了调整,但我没有对它进行过测试,并且#34; as-is"。