2015-06-18 2 views
1

Мне нужно отфильтровать список или записи в соответствии с выбором в dropdownlists. У меня есть три выпадающих списка, которые должны фильтровать записи в ответ на взаимодействие друг с другом. i.e выбор значения в одном раскрывающемся списке должен фильтровать записи, сделанные другими значениями выпадающего списка.Фильтрация записей в соответствии с выпадающим списком

var filterAndLimitResults = function (cursor) { 

    if (!cursor) { 
     return []; 
    } 

    var raw = cursor.fetch(); 

    var currentChosenCategory = chosenCategory.get(); 
    var currentChosenCity = chosenCity.get(); 
    var currentJtype = chosenJtype.get(); 

    console.log(currentChosenCategory); 
    console.log(currentChosenCity); 
    // filter category 
    var filtered = []; 
    if (!currentChosenCategory || currentChosenCategory == "" && !currentChosenCity || currentChosenCity == "" && !currentJtype || currentJtype == "") 
    { 
     filtered = raw; 
     // console.log(filtered); 
    } 
    else { 

     filtered = _.filter(raw, function (item) { 
      if(currentChosenCategory){ 
      return item.ccategory === currentChosenCategory ; 
      } 
      if(currentChosenCity){ 
      return item.city === currentChosenCity ; 
      console.log(item.city === currentChosenCity); 
      } 
     }); 
     } 

var currentLimit =limit.get(); 
//enforce the limit 
if (currentLimit) { 
    filtered = _.first(filtered, currentLimit); 
} 
return filtered; 
}; 

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

Редактировать для текста на основе поисковой

Вот мой eventmap для Seach коробки

"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)); 
    } 
    } 

Это то, что IAM делает в filteredAndLimitResults

if(!(!currentSearchTitle || currentSearchTitle == "")) { 
     filtered = _.filter(filtered, function (item) { 
       return item.title === currentSearchTitle ; 
       console.log(item.title === currentSearchTitle); 
     }); 
    } 

, когда я печатаю что-то в в поле поиска. все записи исчезают, и когда в прессе esc он возвращается, как это было. в console.log я вижу, что каждый раз нажимаю клавишу, она возвращает коллекцию.

ответ

0

Вам необходимо принудительно применять фильтры один за другим. Попробуйте вот так:

var filterAndLimitResults = function (cursor) { 

    if (!cursor) { 
     return []; 
    } 

    var raw = cursor.fetch(); 

    var currentChosenCategory = chosenCategory.get(); 
    var currentChosenCity = chosenCity.get(); 
    var currentJtype = chosenJtype.get(); 

    console.log(currentChosenCategory); 
    console.log(currentChosenCity); 
    // filter category 
    var filtered = []; 
    if (!currentChosenCategory || currentChosenCategory == "" || currentChosenCategory === "All categories") 
    { 
     filtered = raw; 
     // console.log(filtered); 
    } 
    else { 
     filtered = _.filter(raw, function (item) { 
      if(currentChosenCategory){ 
       return item.ccategory === currentChosenCategory ; 
      } 
     }); 
    } 
    // filter city 
    if (!(!currentChosenCity || currentChosenCity == "" || currentChosenCity === "All cities")) 
{ 
     filtered = _.filter(filtered, function (item) { 
      if(currentChosenCity){ 
       return item.city === currentChosenCity ; 
       console.log(item.city === currentChosenCity); 
      } 
     }); 
    } 
    // filter JType 
    if (!(!currentJtype || currentJtype == "" || currentJtype === "All Jtypes")) 
{ 
     filtered = _.filter(filtered, function (item) { 
      if(currentJtype){ 
       //update the item.ccategory with the right field 
       return item.ccategory === currentJtype ; 
      } 
     }); 
    } 
    var currentLimit =limit.get(); 
    //enforce the limit 
    if (currentLimit) { 
     filtered = _.first(filtered, currentLimit); 
    } 
    return filtered; 
}; 
+0

это опечатка? 'if! (! currentChosenCity || currentChosenCity ==" ")' '' '' 'бросает ошибку. поэтому я сделал это так: if (! (! currentChosenCity || currentChosenCity == "")). и другое: я не могу видеть записи сейчас. они не отображаются – syed

+0

Вы правы, я забыл скобки, поэтому это должно быть 'if (! (! currentChosenCity || currentChosenCity ==" "))'. Попробуйте добавить 'console.log (filter);' после каждого фильтра. – Billybobbonnet

+0

его работая теперь спасибо. Еще одна вещь, которую мне нужно добавить для всех городов, все категории для этого в dropdown.so, которые должны быть похожими на все ciategories в Нью-Йорке или на маркетинг в Сиэтле и подобных. как я могу это сделать в этом? – syed

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