2015-06-20 99 views
0

这个问题的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

你几乎是对的。你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 +少校+ 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的工作启发。我改编了它,但我没有按照原样进行测试。

+0

让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/81534/discussion-between-billybobbonnet-and-syed)。 – Billybobbonnet