2015-06-20 7 views
0

Этот вопрос является продолжением из My Previous Question on Filtering DropdownListФильтр и поиск с использованием Textbox

Я добавляю дополнительные функции, и для этого я хочу, чтобы фильтр значений с помощью текстового поля. Вот код для фильтра

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 но он не фильтрует значения в листинге, и он лишает все листинги из пользовательского интерфейса. Пожалуйста, помогите

ответ

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 + майор + с для поиска только для городов (это может быть немного переполнено)

Что касается функции поиска, я предполагаю, что вы хотите искать среди названий своих товаров в рамках текущей выпадающей фильтрации. Затем вам нужно добавить дополнительный шаг для этого. Вам также необходимо установить его перед другими фильтрами. Смотрите мой пример ниже, вставить ее после 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

 Смежные вопросы

  • Нет связанных вопросов^_^