2015-06-18 167 views
1

我需要根據下拉列表中的選擇過濾列表或記錄。 我有三個下拉菜單,需要相互協作來動態地過濾記錄。即一個下拉列表中的值選擇應篩選受其他下拉列表值影響的記錄。根據下拉列表過濾記錄

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

上面的代碼是同時進行過濾下拉和限制記錄的數量,以使無限滾動。

編輯基於文本的搜索

這裏是我的SEACH箱eventmap

"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

這是一個錯字? '如果!(!currentChosenCity || currentChosenCity ==「」)''!'拋出錯誤。所以我做了這樣的'如果(!(!currentChosenCity || currentChosenCity ==「」))''。另外一件事是我現在看不到記錄。他們沒有被顯示 – syed

+0

你是對的,我忘了括號,所以它應該是'if(!(!currentChosenCity || currentChosenCity ==「」))''。嘗試在每個過濾器之後添加一個'console.log(過濾);'。 – Billybobbonnet

+0

它的工作現在thanks.Just另一件事我需要添加一個所有城市,在dropdown.so所有類別應該像在紐約所有ciategories或在西雅圖和喜歡營銷。我該如何做到這一點? – syed